将循环变量传递给AJAX成功

时间:2017-04-24 10:17:50

标签: javascript jquery ajax variables scope

我有一个问题,我的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);闭包但它没有帮助。有任何想法吗?谢谢!

3 个答案:

答案 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;
}
};