2010-12-13 14 views
0

Ich habe ein JSON-Objekt, das von einem XHR aufgefüllt wird. Ich muss dann dieses Objekt mit Werten von einem separaten XHR-Aufruf aktualisieren. Das Problem, auf das ich stoße, ist, dass der zweite Anruf nicht zum richtigen Zeitpunkt erfolgt und ich denke, dass es ein Problem damit ist, wie ich mein Objekt strukturiert habe. Hier ist, was ich habe:JSON-Objekt XHR und Verschlüsse

+0

Ich denke, dass Sie eine Variable mit dem Namen 'proprietäre' innerhalb einer Funktion namens' proprietäre' benennen, könnte einige Probleme verursachen, nicht wahr? –

+1

'PopulateGroups' heißt VOR allen '$ .getJSON (participant_url ...' sind. Sie müssen überprüfen, wie viele Partizipats Sie laden, indem Sie einen externen Zähler verwenden und diesen gegen die Größe von 'proprietary.Groups' in der '$ .getJSON (Teilnehmer_url ...' Callback-Funktion und nur wenn sie gleich sind, sollten Sie 'PopulateGroups' aufrufen. –

+0

Danke, Horia. Wo/wie würde der Zähler inkrementieren? –

Antwort

1

Es scheint eine Reihe von seltsamen Dinge in diesem Code-Snippet.

Zuerst nimmt $ .getJSON (...) einen dritten Parameter, der Ihr Callback ist. Der zweite Parameter ist Daten. Ich denke, Sie übergeben eine Funktion als Ihren Datenparameter. Sie müssen dies an beiden Orten beheben. Wenn Sie nichts weiterleiten müssen, müssen Sie als zweiten Parameter ein leeres Objekt {} verwenden.

Hier ist eine allgemeine Möglichkeit, wie Sie einen Rückruf ausführen können, nachdem ALLE Ihre XMLHttpRequests vom Server zurückgekommen sind.

this.callReturned = function(data) { 

    var countdown = data.groups.length; 
    function callback() { 
     if(countdown-- === 1) { 
      PopulateGroups(); 
     } 
    } 

    for(var i=0; i< data.groups.length; i++) 
    { 
     insparq.Groups[i] = data.groups[i]; 
     $.getJSON(participant_url, { /* data to send to server */ }, callback); 
    } 

} 

In diesem Snippet wird die Callback-Funktion jedes Mal, wenn Sie einen XMLHttpRequest vom Server erhalten ausgeführt. Der letzte führt PopulateGroups() aus, nachdem der Countdown von data.groups.length auf 1 absteigt.