我正在循环中进行一批getJSON()调用。
当调用成功时,返回的JSON包含一个等于循环计数器的值,但是当调用错误处理程序时,我似乎找不到找出导致它的查询的方法(循环计数器的值)因为失败的电话而已。)
var p;
for (p = 1; p <= pagecount; p++) {
var params = {
page: p,
pagesize: 100
};
$.getJSON("http://api.travel.stackexchange.com/1.1/tags?jsonp=?",
params,
function(data) {
/* I can use data.page to know the value of page in the query */
}
).error(function(jqXHR, textStatus, errorThrown) {
/* how can I find the value "page" had in the query? */
});
}
答案 0 :(得分:4)
为每个错误回调生成一个闭包:
function errorHandler(page) {
return function (jqXHR, textStatus, errorThrown) {
console.log(page); // it works
};
}
for (var p = 1; p <= pagecount; p++) {
var params = {
page: p,
pagesize: 100
};
$.getJSON("http://api.travel.stackexchange.com/1.1/tags?jsonp=?",
params,
function(data) {
}).error(errorHandler(p));
}
答案 1 :(得分:2)
您总是可以在每次迭代中为params
创建一个闭包:
var p;
for (p = 1; p <= pagecount; p++) {
var x = {
page: p,
pagesize: 100
};
(function(params) {
return function() {
$.getJSON("http://api.travel.stackexchange.com/1.1/tags?jsonp=?",
params,
function(data) {
/* I can use data.page to know the value of page in the query */
}
).error(function(jqXHR, textStatus, errorThrown) {
/* how can I find the value "page" had in the query? */
});
};
})(x);
}
另一种解决方案是从getJSON
切换到ajax()
,其具有context
属性,您可以将其设置为params
。在这种情况下,您可以在错误回调中以params
的形式访问this
对象。
context: params,
error: function(xhr, status, errorThrown) {
alert(this.pagesize);
}
答案 2 :(得分:2)
切换到$ .ajax,并在beforeSend处理程序中向jqXHR对象添加一个属性:
$.ajax({
url : "http://api.travel.stackexchange.com/1.1/tags?jsonp=?",
dataType : "jsonp",
data : params,
success : your_success_function,
error : your_error_function,
beforeSend : function(jqXHR) {
jqXHR.originalData = params;
}
});
然后,您可以通过错误处理程序中的jqXHR.originalData
访问数据。