JQuery $ .post - vom Server zum Client - wie geht das weiß, was Antwort zu bekommen?
Frage
So haben wir diese:
$.post('testeUpdate.php', 'someValue'
function(dadosResposta) {
$('#ns-nome').val(dadosResposta.nsName);
$('#ns-endereco').val(dadosResposta.nsAddress);
},
"json");
vom Client zum Server: Ist sendet 'sameValue' zu testeUpdate.php mit POST.
Bei Erfolg erhält er die von dem Server-Seite Skript zurückgegebenen Daten und etwas zu tun mit dem auf der Client-Seite. Richtig?
Es ist etwas zwischen dem Server-Side-Skript und diesem Client Side-Skript, dass ich bin nicht immer.
Frage: Wie dadosResposta wird mit den Daten gefüllt von der serverseitigen Skript zurückgegeben? Wie funktioniert es weiß? Wie funktioniert es? Vielleicht ist die Frage auch gestellt werden: Wie tun jquery weiß, wann etwas „auf Erfolg“ ist
oder auf andere Weise versuchen: Die Server-Seite führt das Skript, gibt einige codierten Daten in json. Bis hier ok. Danach, was passiert? Wie wir in den Client-Seite Teil springen wieder?
[Update] Erneuter Versuch: Ich weiß, dass: dadosResposta enthält, was auch immer die serverseitige Skript kehrt Meine Frage ist, Wie hat es darüber weiß? Wie macht er das tun? [/ Update]
Vielen Dank, MEM
Lösung
Die Funktion jQuery .post
verwendet ein XMLHttpRequest-Objekt die URL zugreifen, die Sie an sie übergeben. Der Server antwortet mit entweder einem 200 OK
(Erfolg) oder einer anderen Reaktion (vermutlich Fehler).
Bei Erfolg des XMLHttpRequest-Objekt hat seinen responseText
(oder responseXML
) Eigenschaft auf die vom Server zurückgegebenen Daten. Der Blick hinter die Kulissen jQuery-Funktion, dass Griffe die Antwort dann an Ihrem dataType
Argument schaut, um zu bestimmen, was mit den zurückgegebenen Daten zu tun. Im Fall von Ihrem Beispiel, versucht er es in ein Objekt zu analysieren.
Unter der Annahme, die Antwort ist ein gültiger JSON-String, es geht dann das neu erstellte Objekt zu Ihrer Callback-Funktion als erstes (und einzigen) Argument, das Sie dadosResposta
benannt haben.
Das ist, wie jQuery Ihre Daten in dadosResposta
wird.
Edit: Hier ist ein Code, der wahrscheinlich vage ist ähnlich zu dem, was vor sich geht:
$.post = function([arguments])
{
var xhr = new XMLHttpRequest(); // not cross browser compatible, but good enough for demonstration
xhr.onreadystatechange = function()
{
if (xhr.readyState === 4 && xhr.status === 200)
{
switch (your_dataType) // check your data type
{
case 'json':
your_callback(json_decode(xhr.responseText)); // call your function with JSON object
break;
case 'xml':
your_callback(xhr.responseXML); // call your function with XML
case ... (etc)
}
}
}
xhr.open('POST', your_URL, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.send();
}
Andere Tipps
Der Parameter in der Callback-Funktion (dadosResposta
in diesem Fall) enthält, was auch immer die serverseitigen Skript zurückgibt. wenn der Server-Seite Skript So wurde zum Beispiel nur das Wort „abgeschlossen“ im Klartext Rückkehr dadosResposta
würde die Zeichenfolge "completed"
sein.
In diesem speziellen Fall ist die Daten JSON, die die Daten ermöglicht eine bessere organisiert werden, so dass bestimmte Felder können wie in dadosResposta.nsName
zugegriffen werden.
kennt jQuery der Aufruf erfolgreich war, wenn die Anforderung einen HTTP-Statuscode 200 zurück, wenn der Server die Anforderung nicht verarbeiten kann, einen Fehlercode (dh 500) zurückgegeben werden soll.
$.post
nimmt eine Callback-Funktion. Der Rückruf nimmt ein Argument, das die Daten von dem Server zurückgeführt wird. Also, in Ihrem Fall dadosResposta
die Daten vom Server zurückgegeben.
Es weiß, ob es erfolgreich ist oder nicht, weil der Statuscode war im HTTP-Header zurückgegeben (200 OK
in diesem Fall). Sie können ein zweites Argument in Ihrem Rückruf enthalten, die den Status enthalten wird.
EDIT: Es weiß, weil das ist, wie jQuery funktioniert. jQuery bekommt die Antwort, und übergibt sie als Parameter an Ihren Rückruf. Wenn Sie mehr über die Interna wissen wollen, lesen Sie auf XMLHttpRequest .