2016-09-01 1 views
0

Angenommen, ich verwende diese Funktion mehrmals und die Antwort ist verzögert - werde ich riskieren, dass die Callbacks widersprüchlich sind? Werden Callbacks in globalem Umfang ausgeführt? Ich hoffe, mehrere Ajax-Aufrufe parallel auszuführen.In welchem ​​Umfang wird der Rückruf von einer JQuery JSONP Ajax-Anfrage ausgeführt?

<script> 
var getFeature = function (id) { 
    $.ajax({ 
     type: 'GET', 
     url: "http://myserver.com/feature.aspx", 
     data: {id:id}, 
     jsonpCallback:"GetFeatureCallback", 
     contentType: "application/json", 
     dataType: 'jsonp' 
    }).done(function (data) { 
     //do something with data 
    }); 
} 

getFeature(1); 
getFeature(2); 

</script> 
+0

Beachten Sie, dass JSONP * nicht * Ajax ist. Das Setzen eines 'contentType' ist sinnlos, und die Methode ist immer GET für Skripte, so dass Sie diese weglassen können (und sollten). – Bergi

+0

Danke - werden Sie tun! – Bildsoe

Antwort

0

Ja, die GetFeatureCallback muss eine globale Variable für JSONP arbeiten. Wenn Sie getFeature mehrmals gleichzeitig ausführen, werden sie bei Verwendung eines statischen Namens kollidieren. Wenn Sie keinen Wert für jsonpCallback übergeben, erstellt jQuery bei jedem Aufruf automatisch einen neuen eindeutigen Namen.

Wenn der Server schlecht implementiert ist und keine Möglichkeit zur Auswahl des Rückrufnamens bietet, rufen gleichzeitige Anfragen alle die gleiche Funktion auf, ohne dass sie gut unterschieden werden können. Es kann immer noch machbar sein, wenn die Antwort genügend Informationen enthält, um sie mit der Abfrage zu verknüpfen, aber im Allgemeinen sollten Sie die Anfragen besser sequenzieren.

+0

Ich kann keinen Wert für jsonpCallback übergeben, da der Server es ignoriert und immer GetFeatureCallback (...) zurückgibt. Aber von dem, was ich lesen konnte, ist das die richtige Antwort. JSONP bedeutet, die eingehenden Daten als Skript zu laden, was immer in einem globalen Umfang geschieht. – Bildsoe

0

Der Bereich einer Callback-Funktion wird nicht Funktionen global.Callback einzelnen Umfang haben wie die eines function.the Variablen in den Rückruffunktionen erklärt nicht von außerhalb der Callback-Funktion zugegriffen werden kann.

In JavaScript wird der Bereich zur lexikalischen Zeit definiert, so dass die Variablen in der Callback-Funktion dem Bereich zugewiesen werden, bevor die Ajaxabfrage abgeschlossen ist. Werte für die Variablen werden erst nach Ausführung der Ajaxabfrage während der Ausführung zugewiesen.

Wenn eine Funktion mehrere Male aufgerufen wird der gleiche Speicherort von Variablen jedes Mal in Javascript verwendet wird, gilt auch hier.Aber die Ausführung der Rückruffunktion wird synchron und nicht parallel sein.Und die Reihenfolge der Callback-Funktion wird ausgeführt sei die Reihenfolge, in der jquery zurückkehrt. So wird keine Kollision auftreten.

+0

Das ist alles richtig, beantwortet aber die Frage nicht wirklich. – Bergi

Verwandte Themen