jQueryAjax:等到第一次调用结束,再发送另一个请求$.Deferrent
我面临一个延期的问题,以及如何在这个具体案例中使用它 情况如下 我有一个向服务器发送数据的循环。例如:jQueryAjax:等到第一次调用结束,再发送另一个请求$.Deferrent,jquery,jquery-deferred,Jquery,Jquery Deferred,我面临一个延期的问题,以及如何在这个具体案例中使用它 情况如下 我有一个向服务器发送数据的循环。例如: var array = [{"effect":"save","params":["login_0_form_form_login"],"url":"http://www.example.local/login"},{"effect":"redirect","params":["index"],"url":"http://www.example.local/index"}]; $.each(a
var array = [{"effect":"save","params":["login_0_form_form_login"],"url":"http://www.example.local/login"},{"effect":"redirect","params":["index"],"url":"http://www.example.local/index"}];
$.each(array,function(key,payload) {
$.post(payload.url,payload);
});
然后是处理ajax调用结果的成功方法
App.success = function(result){
//Here I am deciding what to do with the result and checking for errors or warnings
if(result.notification.success) {
//Everything is good
}
else if(result.notification.error) {
//Something is wrong, somehow stop the other ajax call
}
}
尽管如此,我面临的问题是,服务器可能返回错误,例如,错误的登录数据。在这种情况下,尽管服务器返回了错误的登录数据,但它会重定向。我需要以某种方式控制前一个请求是否返回错误。如果是,请不要跟随张贴
我尝试在$.when函数中返回$.post,并使用$.then。但是我没有达到我的期望。您不应该使用循环-AJAX调用将立即(并行)启动,而不是一次运行一个 我将使用一个递归回调循环依次处理每个操作,并结合一个单独的
$。Deferred
对象来通知您发生了什么:
function processActions(actions) {
var def = $.Deferred();
(function nextAction() {
var action = actions.shift(); // dequeue the next action
if (action) {
$.ajax(...).done(nextAction).fail(function() {
def.reject(); // there was an error
});
} else {
def.resolve(); // all done
}
})(); // invoke this function immediately
return def.promise();
}
好主意。我要试试这个。非常感谢。如果我在成功方法中检查服务器返回的数据验证错误,我也应该拒绝延迟验证,对吗?@Coron3r如果有数据验证错误,您的web服务器应该返回
5xx
或4xx
状态代码,从而触发.fail()
路径。。。(正确设计的RESTful服务不会返回2xx
响应“错误”代码)