2017-04-24 3 views
0

Ich habe ein Problem mit der Weitergabe meiner For-Schleife-Index-Variable in Ajax-Erfolgsfunktion .. Ich weiß, dass dies ein Duplikat ist, aber ich habe mehrere andere Lösungen ausprobiert, die ich gefunden habe und keine scheinen für mich arbeiten ..Weitergabe von For-Loop-Variable in AJAX Erfolg

Wie dem auch sei, ich habe diesen Code hier:

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

Nun, was ich versuche zu erreichen -

ich möchte das passieren bettet Variable und die i Variable von for Loops Index in meine Ajax Respo nse, so konnte ich die innerhtml von embeds [i] setzen, nachdem die Antwort beendet ist. Ich habe versucht, die Ajax function in (function (i) {})(i); Schließung wickeln, aber es half nicht. Irgendwelche Ideen? Danke!

Antwort

0

Sie können versuchen, eine Callback-Erfolgsfunktion für den Ajax zu erstellen. Vor dem Ajax Anruf. So etwas wie dieses

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; 

Beachten Sie die "dies." vor dem i. Und dann Ajax:

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

Ich habe nicht versucht, aber es könnte

+0

Hallo, danken Ihnen für Ihre Antwort, leider Didin es Löse mein Problem nicht. Ich bekomme immer noch die "Kann nicht innerhtml für undefined" .. –

+0

Dann versuchen Sie das gleiche Konzept für Einbettungen. successCallback.embeds = bettet ein. Dann in der Callback-Funktion this.embeds [this.i] .innerHTML = content –

1

Ich glaube, ich Variable funktionieren sollte in diesem Rahmen global sein, so würde ich versuchen, es so zu verwenden:

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

Ich löste dieses Problem selbst, trotzdem danke für die Hilfe und Antworten!

ich diese Funktion einfach verwendet für meine Daten zu erhalten, anstelle der üblichen Ajax-Antwort ..

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

Und dann

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