2010-12-28 7 views
2

Ich habe 2 js Funktionen, request() und response(). Request fügt ein dynamisches Skript-Tag in das DOM ein und lädt ein "Skript" vom Server. Das Skript, das vom Server kommt, wird auf call response() gesetzt.Firefox führt keine "asynchrone" Last bei dynamischer Skript-Injektion aus?

Jetzt, wenn ich 5 Anrufe nacheinander nacheinander tätige, und wenn der erste noch wartet, werden die nächsten 4 Anrufe immer noch gemacht, die Antwort kommt zurück (das habe ich von Firebug gesehen), aber response() nicht bis der erste zurückkommt.
Dies geschieht nur in Firefox. :(

Warum ist das den Funktionsaufruf nicht machen

PS:

  1. wenn erste Anforderung verzögert wird, ich über die Ergebnisse ist es egal, ich will die letzte geladen werden und Aufruf Antwort ohne Verzögerungen ..
  2. Ich versuchte $ .ajax mit dataType auf 'jsonp', pure Javascript-Stil Einfügung von Skript-Tags und $. GetScript. Nichts scheint gut mit FF zu funktionieren :(

Edit: Für diejenigen, die Codebeispiele angefordert:

function request(){ 

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

} 

function response(data){ 

     alert(data); 
} 

die Anforderung Funktion ruft den PHP-Skript des Servers, die folgenden Code:

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

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

+0

Wie injizieren Sie das Skript-Tag über 'request()' zum DOM? – cherouvim

+0

Geben Sie bitte einen Code ein. Es ist schwer zu erraten, was ohne es falsch ist. –

+0

ursprüngliche Frage mit Codes bearbeitet. – Shrinath

Antwort

2

Ich habe das selbe gesehen: Firefox, der die Rückantworten behandelt (Javascript-Einschlüsse mit document.createElement ('script') und diese an den Kopfknoten anfügt) in der Reihenfolge der Skriptelemente an das Dokument angehängt. Aus Sicht des Programmierers vereinfacht dies die Programmierung. Ich denke jedoch, dass Sie dies als ein Implementierungsdetail von diesem Browser (Version) betrachten sollten, keine Garantie. Google Chrome führt die enthaltenen Skripts in beliebiger (unerwarteter) Reihenfolge aus.

Dieses Verhalten wird bereits "Old firefox Verhalten" genannt, wenn zu Firefox 4 und HTML5 Compliance (http://hsivonen.iki.fi/script-execution/)

The Old firefox Verhalten

Script eingefügt externes Nicht-Asynchron, nicht suchen Defer Scripts, die in der Reihenfolge ausgeführt werden, wurden in das Dokument eingefügt.

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

+0

Ich war mir dessen nicht bewusst ... Hilfe geschätzt .. – Shrinath