从先前请求

时间:2015-12-01 15:19:37

标签: javascript jquery ajax function

我的应用程序执行多个ajax请求,为此,我使用一组参数调用函数“send”。成功后我仍然想使用原始参数集,但是下一个ajax请求可能已经改变了这些,这将导致错误。请参阅下面的代码。

实施例: 如果请求A调用索引为0的send函数,我希望当我在成功块中使用它时,该索引仍为0。但是,当请求A成功时,请求B已将其更改为1以进行自己的ajax调用。

任何人都可以推荐最佳方法来维护与每个请求相对应的原始值并停止更改吗?

调用'send'的代码注意迭代器i是我在我的例子中提到的索引

        makeGithubRequest: function (url, callback, action) {

        //if not a stat api dataset then perform one manual call
        if(action == "commit" || action == "star"){
            darwin.githubModule.send(url[0] + darwin.projectManagerModule.getcurrRequestPage(), callback, 0, action);
        } else {
            //if a stat api then loop each url, only send true callback on final url
            for(i=0;i<url.length;i++){

                //only perform actually call back when all request data collected
                if(i==(url.length-1)){
                    darwin.githubModule.send(url[i] + darwin.projectManagerModule.getcurrRequestPage(), callback, i, action);
                } else {
                    darwin.githubModule.send(url[i] + darwin.projectManagerModule.getcurrRequestPage(), darwin.projectManagerModule.noCallBack, i, action);                 
                }   
            }
        }
    },

'发送代码'

var darwin = darwin || {};

darwin.githubModule = (function() {

return {
    send: function (url, callback, index, action) {     
        $.ajax({
              dataType: 'JSON',
              type : "GET",
              url : url,
              headers : {
                  Accept: "application/vnd.github.v3.star+json"
              },
              beforeSend: function(req) {
                  req.setRequestHeader('Authorization', 'Basic ' + btoa('xxxxx'));
              },
              success : function(response) {  
                  darwin.Mediator.performSuccessAction(action, response, callback, index);                    
              },
              error: function() {
                $('#ajaxGetUserServletResponse').text("An error occured when connecting to the API, make sure the url is correct");
                $("#ajaxGetUserServletResponse").css({"opacity":"1"});   
             }
        });
    }
};
})();

2 个答案:

答案 0 :(得分:0)

您可以使用closure,例如:

send: function (url, callback, index, action) {
    (function (url, callback, index, action) { // redefining variables locally
        $.ajax({
            dataType: 'JSON',
            type: "GET",
            url: url,
            headers: {
                Accept: "application/vnd.github.v3.star+json"
            },
            beforeSend: function (req) {
                req.setRequestHeader('Authorization', 'Basic ' + btoa(xxx'));
            },
            success: function (response) {
                darwin.Mediator.performSuccessAction(action, response, callback, index);
            },
            error: function () {
                $('#ajaxGetUserServletResponse').text("An error occured when connecting to the API, make sure the url is correct");
                $("#ajaxGetUserServletResponse").css({
                    "opacity": "1"
                });
            }
        });
    })(url, callback, index, action); // passing variables
}

答案 1 :(得分:0)

我发布这个答案,以防其他人发生类似情况,并像我一样误认为原因。问题是在初始请求之前完成辅助请求的结果,以解决我刚刚调整了一些先前逻辑的问题。希望这有助于任何看到类似行为的人。

感谢所有给我时间帮助我的人。