Jquery Queue请求集成一次First Request Success,然后调用下一个请求
Jquery Queue requests integration once First Request Success and then call the next request
是否有任何方法可以集成Jquery队列请求处理第一个请求获得成功响应后,调用下一个请求。
仅供参考,我使用了以下代码中的ajaxManager,但它并没有等待之前的请求成功响应。
$(function() {
ajaxManager.run();
for (key in Reports) {
var Url = Reports[key];
if ( Url != '' ) {
sendRequest(Url, key);
}
}
});
function sendRequest(Url, act_id) {
ajaxManager.addReq({
async: false,
cache: false,
url: Url,
type: "POST",
data: {},
dataType: "jsonp",
success: function(response) {
console.log(response);
}
});
}
有其他方法可以解决这个问题吗。
谢谢。
以下是如何做到这一点的简单示例(我将报告保存在数组中)
var reports = [11, 12, 14, 15];
function doTheReport() {
if (reports.length === 0) {
alert('All reports are done now.');
return;
}
var report_Id = reports.pop();
$.ajax({
url: "/DoTheReport",
complete: function () {
doTheReport();
}
});
};
利用jQuery.queue()、jQuery.dequeue(
尝试
$(function () {
// requests url and data objects
var Reports = [{
"url": "url1",
"data": JSON.stringify([1])
}, {
"url": "url2",
"data": JSON.stringify([2])
}, {
"url": "url3",
"data": JSON.stringify([3])
}];
// all responses
var responses = [];
// jQuery.deferred , resolved when all requests completed
var requests = new $.Deferred() || $(requests);
// do stuff when all requests completed
requests.done(function (data) {
console.log(data);
alert(data.length + " requests completed");
$.each(data, function (k, v) {
$("#results").append(v + "'n")
})
});
// `request` fn
var request = function (url, data) {
return $.post(url, {
json: data
}, "json")
};
// `response` fn
var response = function (data, textStatus, jqxhr) {
// if response `textStatus` === `success` , do stuff
if (textStatus === "success") {
console.log(data, textStatus);
responses.push([textStatus, data, $.now()]);
// if items in queue , dequeue next item
if ($.queue(requests, "ajax").length) {
$.dequeue(requests, "ajax")
} else {
// if items not in queue , resolve requests
requests.resolve(responses)
}
};
};
// `error` fn
// var error = function() {};
// create queue of `request` functions
$.each(Reports, function (k, v) {
$.queue(requests, "ajax", function () {
return request(v.url, v.data)
.then(response /* , error */ )
})
});
// dequeue first item in queue
$.dequeue(requests, "ajax")
})
jsfiddlehttp://jsfiddle.net/guest271314/mgqhzejh/
相关文章:
- ajax请求的顺序总是不同的
- Meteor如何接收HTTP请求
- 有没有一种方法可以防止img get请求使用css或js发生
- 从ajax请求中获取javascript对象
- JSONP请求返回结果,但也触发error_callback
- 在localhost Dev Box上测试JSONP请求的最佳方式
- Ajax请求文档就绪会导致jquery加载缓慢
- MockJax没有在JavaScript应用程序中发送对我AJAX请求的响应
- 正在传递JSONP标头's数据参数到另一个文件中的AJAX请求
- 在openshift node js应用程序中获取请求
- 反应路由器弄乱了请求网址
- 在我的情况下,如何进行http请求
- 使用密码对话框Javascript请求帮助
- servlet中的请求对象,而不是从jsp接收参数值
- 否'访问控制允许来源'标头存在于IISNOde中请求的资源(AngularJS+NodeJs)上
- JavaScript代码未正确检查ajax请求
- node.js请求数据事件未在CORS ajax调用中触发
- AngularJS http.jsonp请求.then和.success函数不起作用
- Jquery Queue请求集成一次First Request Success,然后调用下一个请求
- Ajax请求从未输入“success:function(resp){..}”