解决Jq中Ajax多个请求时,下个请求须等上个请求完成后再发起
在jQuery中,可以使用$.Deferred()
对象来管理多个Ajax请求的顺序执行。以下是一个示例代码:
function makeRequest(url) {
var def = $.Deferred();
$.ajax({
url: url,
type: 'GET',
success: function(data) {
def.resolve(data);
},
error: function(error) {
def.reject(error);
}
});
return def.promise();
}
// 使用
var request1 = makeRequest('http://example.com/api/data1');
var request2 = makeRequest('http://example.com/api/data2');
request1.then(function(data) {
console.log('Request 1 received data:', data);
return request2;
}).then(function(data) {
console.log('Request 2 received data:', data);
}).fail(function(error) {
console.error('An error occurred:', error);
});
在这个例子中,makeRequest
函数创建了一个新的Deferred对象,并返回了一个promise。每个promise都在对应的Ajax请求完成后被resolve。通过链式调用.then()
,我们可以确保第二个请求只有在第一个请求成功并resolve后才会发起。如果有任何一个请求失败,.fail()
将会被触发。
评论已关闭