2010-12-29 10 views
4

Wie kann ich diesen Code machen, um den Wert ohne Einfrieren des Browsers zurückgeben.
Sie können dies mit einer neuen Methode natürlich umschreiben.Ajax jquery async Rückgabewert

function get_char_val(merk) 
{ 
    var returnValue = null; 
    $.ajax({ 
       type:  "POST", 
       async:  false, 
       url:   "char_info2.php", 
       data: { name: merk }, 
       dataType: "html", 
       success: function(data) 
            { 
             returnValue = data; 
            } 
     }); 
    return returnValue; 
} 
var px= get_char_val('x'); 
var py= get_char_val('y'); 

EDIT:i mindestens 20 Variablen von PHP-Datei zu anderen Zeiten erhalten haben müssen.

+0

Ich habe einige scheinbar notwendige Betonung. – SLaks

+1

Ich habe diese Frage (oder eine Variante) unzählige Male gesehen. Es muss endlose Haufen von Duplikaten geben. Wenn nur Leute ein wenig mehr über das Programmieren mit asynchronen Ereignissen lesen könnten, bevor sie versuchen, Ajax oder eine andere asynchrone API/Sprache zu verwenden ... – Jakob

+0

Oder zumindest verstehen, was das Wort _asynchronous_ bedeutet. – SLaks

Antwort

13

Dies ist.
Javascript wird auf dem UI-Thread ausgeführt. Wenn Ihr Code darauf wartet, dass der Server antwortet, muss der Browser eingefroren bleiben.

Stattdessen müssen Sie den Wert über einen Rückruf zurück:

function get_char_val(merk, callback) 
{ 
    var returnValue = null; 
    $.ajax({ 
       type:  "POST", 
       url:   "char_info2.php", 
       data: { name: merk }, 
       dataType: "html", 
       success: function(data) { 
        callback(data); 
       } 
     }); 
} 

get_char_val('x', function(px) { ... }); 
get_char_val('y', function(py) { ... }); 

Beachten Sie, dass die beiden Rückrufe in unvorhersehbarer Reihenfolge ausgeführt werden.


Sie sollten Ihr Design ändern, so dass Sie alle zwanzig Werte in einer einzigen AJAX-Anfrage erhalten können.
Zum Beispiel können Sie eine durch Kommas getrennte Liste von Werten nehmen und ein JSON-Objekt wie { x: "...", y: "..." } zurückgeben.

+4

Korrekt, Sie können einen Rückgabewert in einer asynchronen Anforderung technisch nicht verwenden, da der Programmablauf den Zeitpunkt einer "Rückgabe" von der ersten Methode bis zum Eintreffen der Antwort bereits überschritten hat. – sholsinger

+0

kann es die Arbeit sehr viel Dank: P – Sonny

+0

aber was ich in Funktion eingeben sollte (px) {<>} – Sonny

1

Sie können keine Variablenzuweisungen auf diese Weise vornehmen (asynchron). Sie müssen die Variablen im Handler success festlegen.

variableArray = new Array(); 

get_char_val('x'); 
get_char_val('y'); 

function get_char_val(merk) 
{ 
    var returnValue = null; 
    $.ajax({ 
     type:  "POST", 
     url:   "char_info2.php", 
     data: { name: merk }, 
     dataType: "html", 
     success: function(data) 
      { 
       variableArray[merk] = data; 
      } 
    }); 
} 

Sobald alle der Auslagerungen sind fertig Sie die x- und y-Variablen durch die Verwendung variableArray[x] und variableArray[y]

nicht möglich Zugriff auf
+2

** Verwenden Sie niemals 'async: false'. – SLaks

+0

sry ich brauche andere, um Wert zu erhalten, weil ich 20 andere Variablen zu definieren habe – Sonny

+0

Dann müssen Sie mit einem Array kommen (vielleicht mit Tasten wie 'px' und' py') und lassen Sie den Erfolgshandler das verwalten wie: 'variableArray [merk] = data;' – Dutchie432

0

Dies kann nicht sein, was Sie erwarten, aber man kann so eingestellt async: true, wenn Sie im Browser wollen Pause nicht und so, was Sie auf Erfolg mit px tun wollen