说我有这个:

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);
}

08-25 11:21
查看更多