var arr = ['test1','test2'];
var url = ['/test1/','/test2/'];
arr.forEach(function(item, i, arr){
//alert( i + ": " + item + " (arr:" + arr + ")" );
var obj = arr[i];
$.ajax({
url: url[i],
data: {val:"test"},
//dataType: 'json',
type: 'post',
success: function(data) {
$(obj).html('').html(data);
$(obj).trigger("chosen:updated");
},
error: function() {}
});
});
我们有问题-当我们使用脚本fisrt循环不向其加载数据时obj
,我们看到数据仅在第二秒内加载obj
。如果我们取消注释,则alert( i + ": " + item + " (arr:" + arr + ")" );
在first和second中加载数据obj
。
我们认为当第二个ajax发送时,第一个对象丢失了,脚本无法看到名字obj
(arr [i]),也无法将数据加载到元素中。
有人知道如何解决吗?
PS:如果您认为这个问题不好,我们很抱歉,但是我们找不到有关此信息。
使用ajax上下文参数允许通过此内部成功函数引用当前项目。使用console.log而不是alert不会在调试时阻止代码流。使用$ .each优于forEach,因为它可以通过返回false / true(需要时)来模仿native for循环的中断/继续功能。
注意:item.obj应该是一个jQuery选择器,否则这种用法毫无意义: $('test1')
var arr = [
{ url: '/test1/', obj: 'test1' },
{ url: '/test2/', obj: 'test2' }
];
$.each(arr, function (i, item) {
console.log(i, item);
$.ajax({
url: item.url,
data: {val:"test"},
//dataType: 'json',
type: 'post',
context: item,
success: function(data) {
$(this.obj).html(data).trigger("chosen:updated");
},
error: function() {}
});
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句