加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

基于AJAX的应用中反思的意义

发布时间:2020-12-16 02:52:30 所属栏目:百科 来源:网络整理
导读:Ajax和反思 我正在开发一个基于ajax的应用程序,并想知道反射在这里扮演或可能扮演什么角色? 可能最重要的是我问自己,这是否是一个很好的方法 通过单个处理程序处理所有ajax响应, 反映或解释数据或错误 根据分析委托进一步处理(例如,在哪里注入html). 这是一
Ajax和反思

我正在开发一个基于ajax的应用程序,并想知道反射在这里扮演或可能扮演什么角色?

可能最重要的是我问自己,这是否是一个很好的方法

>通过单个处理程序处理所有ajax响应,
>反映或解释数据或错误
>根据分析委托进一步处理(例如,在哪里注入html).

这是一个萌芽的程序吗?想到什么是利弊?

额外的澄清

我目前的实施,我不满意,看起来像这样.

>为用户操作注册事件处理程序,从而导致ajax请求.
>对于每个请求:

>确定哪个容器是新内容的目标
>验证ajax响应
>如果一切都符合预期,则将结果传递给适当的渲染函数

这是一个例子

function setGamedayScoringChangeHandlers() {
    $("#community").delegate("div.community div.nav","click",function() {
        var orderId = $(this).html();
        var communityId = $(this).closest('.communityView ').dashId();
        requestGamedayScoringByOrderId(communityId,orderId);
    });
}

function requestGamedayScoringByOrderId(communityId,orderId) {
    var $targetContainer = $('#community-' + communityId + '-gameday');
    $.ajax({
        url: '?api=league&func=getGamedayScoringByCommunityIdAndOrderId',data: {
            communityId : communityId,orderId : orderId
        },success: function(result) {

             // custom indicator,that sth. didn't work as supposed 
             if (result.success === false) {

                 // a php error couldn't be handled as expected
                 if (result.error === 'phpRuntimeError') {
                      // ..
                 }

             // ..

             }

             else {
                 renderGamedayScoring(result,$targetContainer);
             }
        }
    });
 }

如何简化冗余错误检查?反思,在某种意义上:“响应是否有效?错误消息说什么或数据是什么样的?”做一个合理的结构吗?另外:实际的ajax请求的“耦合”和确定$targetContainer是“正常”的过程吗?

非常感谢,
罗布森

解决方法

是的,我认为注册ajax处理程序是一个很好的方法,因为它更容易控制,你将有更少的冗余代码和更少的登机效果.如果我查看您的代码注释,似乎响应并不像您期望的那样.我这样做是为了控制一组与服务器脚本交谈的ajax请求.我构建了一个请求对象,如:

// myscript.js
var rqPHP = {
            url:'php/dispatcher.php',type:'POST',dataType:'json',success:function(json,status,jXHR){
                //console.log('rqPHP.succes : ',json);
                if(!json)   return console.warn('[rqPHP.success] json is null');
                if(!json.cmd)   return console.warn('[rqPHP.success] json.cmd is null');
                if(!json.res)   return console.warn('[rqPHP.success] json.res is null');
                if(json.err && json.err.length){        console.warn('[rqPHP.success errors cmd:'+json.cmd+'] '+json.err);}
                // so if no errors,dispatch actions based on original command asked
                switch(json.cmd){
                    case 'loadfile' :
                        // do whatever with response
                        break;
                    case 'savefile' :
                        // do whatever with response
                        break;
                }
            },error:function(jXHR,err){
                console.warn('[rqPHP.error] ',',err,jXHR.responseText);
            }
        };

然后当使用这个对象时,我所做的所有不同的行动,我精确的行动和论点,我通过.我用来请求一个json数据,所以我能够收到一个简单的解析响应,所以我能够返回原来的命令,以及一些可能发生的错误的详细信息,例如,当我需要触发请求时:

// myscript.js
rqPHP.data = {'cmd':'loadfile','filename':'file.dat','arg2':'other argument'};
$.ajax(rqPHP);

然后是一个响应的服务器脚本示例:

// dispatcher.php    
    $pv = $_POST;
    $res = '';
    $err = array();
    // you check the command asked for :
    switch(strtolower($pv['cmd'])){
      case 'savefile' :
        // do whatever
        break;
      case 'loadfile' :
        // do whatever
        if(any error){
          $err[] = $loadError;// push error with whatever details you'll retrieve in javascript
       }else{
         $res = ',"res":"'.$dataLoaded.'"';// format json response so you'll check the var exist
        }
        break;
    }
    $jsonRes = '{"cmd":"'.$pv['cmd'].'"'.$res.',"err":"'.implode('|',$err).'"}';// json result
    print $jsonRes;

他们可能是一些错误,它只是为了原则,我希望这将有所帮助,只是一些最后的建议:

>你应该更好地使用requestObject.data传递任何参数,而不是像你一样设置url,这更容易,因为jQuery正确编码工作
>你可以使用POST,这样url保持干净,post vars’隐藏’
>在您的情况下,因为您可能希望使用ONE服务器脚本集中服务器操作,所以您应该使用’json’作为dataType,因为从响应中检索详细信息要容易得多,这样的错误.你必须区分当url不存在时被触发的ajax错误,或者访问被拒绝,当服务器回复时它只是无法响应这个请求,并且区分服务器脚本的正确响应,我的意思是脚本响应很好,但可能发生命令错误,例如对于’loadfile’命令,参数fileUrl可能是错误的或不可读的,所以操作已完成,但响应对您无效…

如果你计划为不同的部分激活许多负载(我的意思是你可能不会在加载新的之前等待ajax的响应),最好设置主要的成功和错误函数来保持集中化然后构建一个新的请求每次加载时对象

function rqSuccess(json,jXHR){
   // put same checking code as before,then you can also retrieve some particular variables
   // here,'this' should correspond to the request object used for the $.ajax so :
   console.log('myTarget is : ',this.myTarget,myVariable is : ',this.myVariable);
}
function rqError(jXHR,err){
   // put same checking code 
}
// then each time you want make one or many independant calls,build a new request object
var myRq = {url:'dispatcher.php',success:rqSuccess,error:rqError,myTarget:$('#myblock'),// any variable you want to retrieve in response functions
    myVariable:'Hello !',// after all it is an object,you can store anything you may need,just be carefull of reserved variables of the ajax object (see jQuery $.ajax doc)
    // the data object is sanitized and sended to your server script,so put only variables it will need
    data : {'cmd':'loadfile',...}
}
$.ajax(myRq);
// you may load an other independant one without waiting for the response of the first
var myRq2 = {...myTarget:$('#anotherblock'),data:{'cmd':'anotheraction'}...}
$.ajax(myRq2);

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读