2017-06-11 1 views
-2

Ich bin eine harte Zeit, die Logik herauszufinden, die folgende Funktion withing:OnReadyStateChange Logik

function confirm() { 
    var http = new XMLHttpRequest(); 
    var url = "promote.php?user=' . $link . '"; 
    var params = "confirm_ref=' . urlencode(encrypt($reff,$key)) . '"; 
    http.open("POST", url, true); 
    http.setRequestHeader("Content-type", "application/x-www-form-urlencoded"); 
    http.onreadystatechange = function() { 
    if(http.readyState == 4 && http.status == 200) { 
    } 
    } 
    http.send(params); 
} 

Wie pro meine Logik, die http.send(params); sollte direkt nach dem http.readyState == 4 && http.status == 200 Zustand aufgenommen werden. Aber wenn ich das tue, funktioniert es nicht mehr.

Vielleicht kann jemand erklären, wie kann ich die beiden Bedingungen (Readystate und Status) stellen Sie sicher, den Posten vor dem Senden ...

+0

Sie werden nicht von der Post festgelegt, sie werden von der Antwort festgelegt. –

+0

Was innerhalb dieser bedingten Anweisung geschieht, ist, was der Browser tut, nachdem er eine gute Antwort vom Server erhalten hat. –

Antwort

1

Die Funktion Sie eine Callback-Funktion onreadystatechange zuweisen erfüllt wird, der ausgeführt wird, wenn die readystatechange-Ereignis wird ausgelöst. Dies kann jederzeit passieren, so dass Sie den Programmablauf beim Zuweisen der Funktion nicht blockieren.

Jetzt wollen Sie explizit mit dem 4 - FERTIGEN Zustand fertig werden. Das bedeutet, dass "die Datenübertragung abgeschlossen wurde oder während der Übertragung etwas schief gegangen ist (z. B. unendliche Weiterleitungen)". Sie möchten auch sicherstellen, dass der Status vom Server 200-OK lautet. Beide existieren nur, nachdem Sie die Anfrage gesendet haben und der Server seinen Statuscode zurückgegeben hat. Daher würde es keinen Sinn machen, diese Bedingungen zu überprüfen, bevor Sie eine Anfrage senden.