2017-04-24 4 views
0

forループのインデックス変数をAjaxの成功関数に渡すことに問題があります。これは重複していることは知っていますが、ループ変数をAJAXの成功に渡す

を私が渡したい変数埋め込み、i - 私が達成しようとしているものを、今

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

を:私のために動作するように...

をとにかく、私は右ここにこのコードを持っています変数forのループインデックスをmy ajax respoに挿入するnseだから、応答が完了した後で埋め込み[i]のinnerhtmlを設定することができました。私はアヤックス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; 

「this」に注意してください。私の前に そして、あなたのAjax:

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

私はそれを試していないが、それは

+0

こんにちは、 は が、残念ながらそれdidin、お返事ありがとうございました私の問題を解決していない。 私はまだ "定義されていないためにinnerhtmlを設定できません"を得ています。 –

+0

また、同じ概念を埋め込みにも試してみてください。 successCallback.embeds = 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); 
関連する問題