说我有这个:
for( i = 0; i < 10; i++ )
{
$.ajax({
type: "POST",
url: "geocode-items.php",
async: true,
data: {
key: i
},
success: function( data )
{
// data returns the index I passed into the script with the data property.
},
error( a, b, c )
{
alert( i ); // this obviously won't work
}
});
}
警报(i);错误部分中的内容不会警告正确的索引。尽管成功了,但是我可以将我输入到geocode-items.php脚本中的密钥传回去,但是我不能在error部分中传回任何东西。
触发错误方法时,您知道如何引用通过请求发送的原始数据吗?
像this.data.key这样的东西?因此我可以报告所卡住的特定对象的错误?不必写一些通用的“有错误代码,但我不知道在哪里”
最佳答案
您应该阅读有关javascript范围和闭包的内容。
在您的情况下,每个错误回调的值i
都是相同的,并且由于ajax是异步的,因此所有错误回调的i
均为10。
javascript仅具有基于函数的作用域,而没有基于块的作用域。
您可以做的是创建一个匿名函数,将值传递给(function(param1) { } )(value)
,该函数将立即被调用。然后将函数的参数绑定到该函数调用。
for( i = 0; i < 10; i++ )
{
(function(idx) {
$.ajax({
type: "POST",
url: "geocode-items.php",
async: true,
data: {
key: idx
},
success: function( data )
{
// data returns the index I passed into the script with the data property.
},
error: function( a, b, c )
{
alert( idx ); // this obviously won't work
}
});
})(i);
}