2017-04-24 47 views
0

我有一個將我的for循環索引變量傳遞給ajax成功函數的問題..我知道這是重複的,但我嘗試了幾個其他解決方案,爲我工作..將循環變量傳遞給AJAX成功

無論如何,我有這樣的代碼就在這裏:

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

現在,我想要實現 -

我想通過嵌入:變量和ifor循環索引變量放入我的ajax respo中所以我可以在響應結束後設置嵌入[i]的innerhtml。我嘗試包裝ajax function in (function (i) {})(i);封閉,但它沒有幫助。有任何想法嗎?謝謝!

回答

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; 

請注意「這個」。在我面前。 然後你的Ajax:

jQuery.ajax({ 
    url: url, 
    dataType: 'json', 
    success: successCallback 
}); 

我還沒有嘗試過,但它可能工作

+0

嗨, 感謝您的回覆,不幸的是它didin解決不了我的問題。 我仍然得到「無法設置undefined的innerhtml」.. –

+0

然後嘗試嵌入以及相同的概念。 successCallback.embeds =嵌入。然後在回調函數this.embeds [this.i] .innerHTML = content –

1

我想我變量應該是在全球範圍,所以我會嘗試使用這樣的:

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; 
0

我自己解決了這個問題,非常感謝所有的幫助和回覆!

我只是用這個函數用於獲取,而不是通常的Ajax響應我的數據,..

_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; 
} 
}; 

然後就是

var response = _lr.get.sync(url);