如何在完成后找出传递给(异步)jQuery AJAX请求的参数?
基本上,我正在发送一堆AJAX请求,其中不同的id作为参数传递,并在每个请求完成时向用户显示结果。现在,如果请求成功,我可以在请求的结果中传回id。但是,如果请求失败,我不知道哪个请求失败,即该请求是什么ID。
示例(javascript / jQuery):
for(var i=0; i < 10; i++ ) {
$.ajax({
type: "GET",
url: "get-results.php",
data: { 'id': i },
success: function(data, textStatus, xmlReq) {
data = $.parseJSON(data);
$("#result" + data.id).html(data.result);
},
error: function(xmlReq, textStatus, errorThrown) {
var id= ???;
$("#result" + id).html('error bla bla');
}
});
}
答案 0 :(得分:3)
$.ajaxError
为您提供通过AJAX调用发送的数据。
.ajaxError(handler(event, XMLHttpRequest, ajaxOptions, thrownError))
ajaxOptions
对象包含可以通过$.ajax
因此,不要使用error:
中的$.ajax
选项,而是使用$.ajaxError
。
$(document).ajaxError(function(event, XMLHttpRequest, ajaxOptions, thrownError){
if(ajaxOptions.url.indexOf('get-results.php') != -1){
var data = ajaxOptions.data; // this is a string: 'id=1¶m2=4'
// to get the ID, you need to parse this
}
});
答案 1 :(得分:2)
使用Javascript支持闭包的事实,只需编写变量名称(但要小心将其复制到for
块范围内,以便它不会更改):
for(var i=0; i < 10; i++ ) {
var INDEX = i;
$.ajax({
type: "GET",
url: "get-results.php",
data: { 'id': i },
success: function(data, textStatus, xmlReq) {
data = $.parseJSON(data);
$("#result" + data.id).html(data.result);
},
error: function(xmlReq, textStatus, errorThrown) {
var id = INDEX;
$("#result" + id).html('error bla bla');
}
});
}
我相信这就是你想要的。
答案 2 :(得分:2)
您需要为i
函数捕获error
的当前值。你用一个封闭捕获。所以:
error: function(id) {
return function(xmlReq, textStatus, errorThrown) {
$("#result" + id).html('error bla bla');
};
}(i)
即error
是立即调用传递当前值i
的匿名函数的结果。
答案 3 :(得分:1)
您需要将回复传回来。