2009-07-01 7 views
2

Probleme mit dieser Funktion, insbesondere mit $ .getJSON(). Ich möchte die getJSON Funktion von jQuery in einer Javascript-Funktion wickeln etwa so:Aufruf der jQuery-Funktion mit der Javascript-Funktion

function reload_data() { 
    $.getJSON("data/source", function(data) { 
     $.d = data; 
    }); 
} 

Aber wenn ich reload_data() aufrufen, es wird nicht ausgeführt, die jQuery-Funktion nach innen. Irgendwelche Ideen?

+0

Woher wissen Sie, dass es die Funktion nicht ausführt? Hast du einen Breakpoint auf die Leitung gelegt, um das zu überprüfen? – Nosredna

+0

Es funktioniert gut. Ich denke, es muss etwas daran liegen, dass die Daten in der $ .d-Variablen nicht so aktualisiert werden, dass der Rest des Skripts sie verwenden kann. – mcmaloney

+0

Sie zeigen uns nicht genug vom Bild, um eine genaue Antwort zu geben. –

Antwort

2

Setzen Sie eine Warnung in die Seite, um zu wissen, dass sie aufgerufen wird.

und ein Versuch fängt um den Anruf jQuery, um zu sehen, ob es ein Fehler ist

function reload_data() { 
    alert('reload_data start'); 
    try{ 
     $.getJSON("data/source", function(data) { 
      $.d = data; 
     }); 
    } 
    catch (ex){ 
     alert ('error in jQuery call:' + ex) 
    } 
} 
3

Sie sind nicht uns genug zu erzählen. Ich werde nur raten!

Wenn Sie diese Funktion aufrufen, und dann sofort $ .d für die Ergebnisse überprüft, dass wird nicht funktionieren, weil Sie keine Zeit für die asynchrone erlauben AJAX Anforderung abzuschließen ...

reload_data(); 
alert($.d); // What?! It's not displaying the updated results?! 

Sie erhalten eine Callback-Struktur nutzen müssen, wie jQuery verwendet, um es funktioniert ...

reload_data(function() { 
    alert($.d); 
}); 

function reload_data(func) { 
    $.getJSON("data/source", function(data) { 
    $.d = data; 
    //Execute the callback, now that this functions job is done 
    if(func) 
     func(); 
    }); 
} 
+0

Ja, das war meine Vermutung. Deshalb fragte ich, ob er sicher sei, dass die Funktion nicht angerufen wird. Immerhin ist Ajax asynchron. – Nosredna

+0

Das bringt einen interessanten Punkt. Ich denke, er könnte seine Anfrage ändern, um synchron zu sein, und das könnte das Problem beheben, obwohl ich nicht denke, dass das die beste Lösung ist, also werde ich meine Antwort so lassen wie sie ist. –

+0

Wie auch immer, er wird warten müssen, bis der Ajax ausgeführt wird, bevor er etwas mit der Variablen machen kann. Ich denke (aber ich bin mir nicht sicher), dass die Benutzeroberfläche des Browsers besser reagiert, wenn der Anruf async bleibt. – Nosredna

0

Danke für die Hilfe jeder, aber die Lösung war eigentlich ganz einfach. Es war nur eine Frage der Synchronisation. Die Seite wurde neu geladen, bevor die JSON-Daten neu geladen wurden. Aus diesem Grund wurde kein Fehler angezeigt.