我可以为函数绑定除“this”之外的其他内容吗?

时间:2015-11-19 13:36:02

标签: javascript jquery ajax

我需要将外部变量传递给jQuery Ajax的success-function。我的ajax像这样循环:

var props = ['a', 'b', 'c'];

var results = 
{
    a: null,
    b: null,
    c: null
};

for(var key in props)
{
    var prop = props[key];

    $.ajax(
    {
        url: 'someurl',

        data:
        {
            somedata: 'somevalue'
        },

        success: function(data, status, xhr)
        {
            // This here does not work properly, because the prop's value changes
            // Due to promise stuff
            results[prop] = data;  
        }
    });
}

我需要将成功返回的数据填充到正确的位置,但上面的实现不起作用,因为prop的值在调用成功之前发生了变化。

我发现我可以通过将成功函数与支柱绑定在一起来“绕过”这个问题:

success: function(data, status, xhr)
{
    results[this] = data;  
}.bind(prop)

但这似乎不是一个好主意,此外,我只能绑定一个变量,而不是多个,如果需要的话。

这似乎也不起作用:

success: function(data, status, xhr)
{
    var privprop = prop;
    results[privprop] = data;  
}

所以基本上什么是给每个成功回调一个“私有”变量的最佳方法,这个值是什么是整个ajax制作时prop的值?我可以以某种方式绑定多个变量并覆盖除this以外的其他内容吗?

1 个答案:

答案 0 :(得分:6)

尝试通过执行以下操作来限制特定ajax的每个prop变量的范围:

for(var key in props)
{
    var prop = props[key];

    (function(prop){


        $.ajax(
        {
            url: 'someurl',

            data:
            {
                somedata: 'somevalue'
            },

            success: function(data, status, xhr)
            {
                // This here does not work properly, because the prop's value changes
                // Due to promise stuff
                results[prop] = data;  
            }
        });
    })(prop);
}