我需要将外部变量传递给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
以外的其他内容吗?
答案 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);
}