javascript - 我可以为函数绑定(bind) 'this' 以外的东西吗?

标签 javascript jquery ajax

<分区>

我需要将外部变量传递给 jQuery Ajax 的成功函数。我的 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 的值在调用成功之前发生了变化。

我发现我可以通过像这样将成功函数的 this 与 prop 绑定(bind)来“绕过”这个问题:

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

但这似乎不是一个好主意,此外,我只能绑定(bind)一个变量,如果需要则不能绑定(bind)多个。

这似乎也不起作用:

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

那么基本上什么是给每个成功回调一个“私有(private)”变量的最好方法,哪个值是整个 ajax 制作时 prop 的值?我能否以某种方式绑定(bind)多个变量并覆盖 this 以外的内容?

最佳答案

尝试通过执行以下操作来限制特定 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);
}

关于javascript - 我可以为函数绑定(bind) 'this' 以外的东西吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33805453/

相关文章:

javascript - 按需滚动加载数据

php - responseText 包含额外的空白字符(换行,换行),如何防止和删除它们?

java - 将 url 分配给 Java EE 项目中的 ajax (js) 函数

javascript - JQuery/JavaScript : Why does function mess up array outside function?

javascript - 加深对 JavaScript 求值/执行的理解

javascript - 为什么这个 requestAnimationFrame 设置无法正常执行?

javascript - 如何在 document.ready 中访问我的表单值

javascript - jquery window.width 的逻辑是什么?

ajax - 如何在 Ajax 调用/HTML 阻塞期间在旋转 gif 上方添加文本

php - 加载、滚动、放大和缩小图像,如谷歌地图