我有一个问题,我的for循环索引变量传递到ajax成功函数..我知道这是一个重复,但我已经尝试了其他几个我找到的解决方案,似乎没有一个对我有用.. < / p>
无论如何,我在这里有这个代码:
embeds = document.getElementsByClassName('kcode');
for (i = 0, l = embeds.length; i < l; i++) {
if (typeof embeds[i] != 'undefined' && typeof embeds[i].classList != 'undefined' && !embeds[i].classList.contains('filled')) {
embeds[i].classList.add('filled');
var embed = window.intext[embeds[i].getAttribute('data-k-kid')];
if (embed) {
embeds[i].classList.add('embed');
switch (embed.type.toLowerCase()) {
case 'sport_plugin':
if(sportData.selectedType.name == "Ranking Table") {
(function(i) {
jQuery.ajax({
url: url,
dataType: 'json',
success: function(response) {
var content = '';
if (table.name == "Western Conference" || table.name == "Eastern Conference") {
content+= '</div>';
embeds[i].innerHTML = content;
}
}
});
})(i);
}
break;
default:
embeds[i].style.display = "none";
}
embeds[i].classList.remove('kcode');
i--;
}
}
}
现在,我正在努力实现的目标 -
我想将embeds变量和i
循环索引的for
变量传递到我的ajax响应中,所以我可以在响应后设置嵌入[i]的innerhtml
完了。我尝试包装ajax function in (function (i) {})(i);
闭包但它没有帮助。有任何想法吗?谢谢!
答案 0 :(得分:1)
我认为i变量在该范围内应该是全局的,所以我会尝试使用它:
case 'sport_plugin':
if(sportData.selectedType.name == "Ranking Table") {
jQuery.ajax({
url: url,
dataType: 'json',
success: function(response) {
var content = '';
if (table.name == "Western Conference" || table.name == "Eastern Conference") {
content+= '</div>';
embeds[i].innerHTML = content;
}
}
});
}
break;
答案 1 :(得分:0)
您可以尝试为ajax创建回调成功函数。在ajax调用之前。像这样的东西
var successCallback = function() {
var content = '';
if (table.name == "Western Conference" || table.name == "Eastern Conference") {
content+= '</div>';
this.embeds[this.i].innerHTML = content;
}
};
successCallback.i = i;
successCallback.embeds = embeds;
注意&#34;这个。&#34;在我面前。 然后是你的ajax:
jQuery.ajax({
url: url,
dataType: 'json',
success: successCallback
});
我没有尝试过,但可能会有效
答案 2 :(得分:0)
我自己解决了这个问题,但感谢所有的帮助和回复!
我只是使用此函数来获取我的数据,而不是通常的ajax响应..
CreateDocumentQuery
然后只是
_get = {
'sync': function (url) {
var xhr = typeof XDomainRequest != 'undefined' ? new XDomainRequest() : new XMLHttpRequest();
xhr.open('get', url, false);
xhr.send(null);
console.log('sync url ' + url);
//console.log(xhr.responseText); return {};
var data = {};
if (xhr.status == 200) {
data = JSON.parse(xhr.responseText);
}
return data;
}
};