Frage

Ich habe 2 JS -Funktionen, Request () und Antwort (). Anfrage injiziert ein dynamisches Skript -Tag in DOM und lädt einige "Skript" vom Server. Das Skript, das vom Server stammt, wird so eingestellt, dass die Antwort aufgerufen wird ().

Wenn ich nun 5 Anrufe nach dem anderen sofort tätige und die erste noch wartet, werden die nächsten 4 Anrufe noch getätigt, die Antwort kommt zurück (ich habe das von Firebug gesehen), aber Response () wird erst zum ersten Mal aufgerufen Man kehrt zurück.
Dies geschieht nur in Firefox. :(

Warum macht das nicht den Funktionsaufruf?

PS:

  1. Wenn die erste Anfrage verzögert wird, interessiert mich die Ergebnisse nicht. Ich möchte, dass der letzte geladen wird und die Antwort ohne Verzögerungen aufruft.
  2. Ich habe $ .ajax mit DataType ausprobiert, das auf 'JSONP', ein reines JavaScript -Stil in Einfügen von Skript -Tags und $ .getScript eingestellt wurde. Nichts scheint gut mit FF zu funktionieren :(

Bearbeiten: Für diejenigen, die Code -Beispiele angefordert haben:

function request(){

    var URL = 'http://xxx.xxx.xxx.xxx/cgi-bin/response.php?callback=?';
    callHandle = $.getScript(URL);

}

function response(data){

      alert(data);
}

Die Anforderungsfunktion ruft das PHP -Skript des Servers auf, das den folgenden Code enthält:

$data = $_GET['callback']; //using just to identify request uniquely.
sleep(rand(1,10));
echo "response(".$data.")";

Wenn nun die erste Anfrage 10 Sekunden dauert und die zweite Anfrage 2 Sekunden dauert, sollte die Antwort für die zweite Anfrage zurückgerufen werden. Aber es wird die Antwort erhalten, aber anstatt zu alarmieren, wartet es auf die erste Anfrage in Firefox. Warum ist das so ?

War es hilfreich?

Lösung

Ich habe dasselbe gesehen: Firefox-Umgang mit den Rückgabemantworten (JavaScript-Einschlüsse mit Dokument. Aus Sicht des Programmierers vereinfacht dies die Programmierung. Ich denke, Sie sollten dies jedoch als Implementierungsdetail aus diesem Browser (Version) behandeln, nicht als Garantie. Google Chrome führt die enthaltenen Skripte in einer (unerwarteten) Reihenfolge aus.

Dieses Verhalten wird bereits als "altes Firefox -Verhalten" bezeichnet, wenn Sie nach Firefox 4 und HTML5 Compliance (Compliance (HTML5) suchen (Compliance () http://hsivonen.iki.fi/script-execution/ )

Das alte Firefox -Verhalten

Skript-nicht eingelagertes externes, nicht asynchronisiertes, nicht desferische Skripte, die in der Reihenfolge ausgeführt wurden, die sie in das Dokument eingefügt wurden.

Haben Sie versucht, Ihre Skripte mit document.write einzuführen?

Andere Tipps

Sofern dies nicht aus Bildungsgründen liegt, schlage ich vor, eine Bibliothek zu verwenden, die sich speziell mit diesen Browser -Eigenheiten befasst. z.B: http://code.google.com/p/controljs/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top