Jquery $ .post - dal server al client - come si sa quale risposta per arrivare?
Domanda
Quindi abbiamo questa:
$.post('testeUpdate.php', 'someValue'
function(dadosResposta) {
$('#ns-nome').val(dadosResposta.nsName);
$('#ns-endereco').val(dadosResposta.nsAddress);
},
"json");
dal client al server: E 'invia 'sameValue' per testeUpdate.php usando POST.
In caso di successo, riceve i dati restituiti dallo script lato server e fare qualcosa con quella sul lato client. Corretto?
C'è qualcosa tra lo script lato server e questo script lato client che non sto ottenendo.
Domanda: Come funziona dadosResposta si riempie con i dati restituiti dallo script lato server? Come si sa? Come funziona? Forse la domanda può anche essere posta: come si fa jquery sa quando qualcosa è "il successo"
o cercando un altro modo: Il lato server esegue lo script, restituisce alcuni dati codificati in JSON. Fino a qui ok. Dopo questo, che cosa succede? Come si fa a saltare nella parte lato client di nuovo?
[update] Cercando di nuovo: So che: dadosResposta contiene tutto ciò che gli script lato server restituisce la mia domanda è, Come lo fa sa di questo? Come fa a farlo? [/ Update]
Grazie mille, MEM
Soluzione
La funzione .post
jQuery utilizza un oggetto XMLHttpRequest per accedere all'URL che avete passato ad esso. Gli risponde del server sia con un 200 OK
(esito positivo) o qualche altra risposta (presumibilmente fallimento).
In caso di successo, l'oggetto XMLHttpRequest ha il suo insieme di proprietà responseText
(o responseXML
) per i dati restituiti dal server. Il dietro le quinte-jQuery funzione che gestisce la risposta poi guarda il tuo ragionamento dataType
per determinare che cosa fare con i dati restituiti. Nel caso del tuo esempio, si tenta di analizzare in un oggetto.
Supponendo che la risposta è una stringa JSON valido, quindi passa l'oggetto appena creato la vostra funzione di callback come il suo primo (e unico) argomento, che hai nominato dadosResposta
.
che è come jQuery riceve i dati in dadosResposta
.
Modifica Ecco alcuni codice che probabilmente è vagamente simile a quello che sta succedendo:
$.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();
}
Altri suggerimenti
Il parametro della funzione di callback (dadosResposta
in questo caso) contiene qualunque sia il rendimento di script lato server. Ad esempio, se lo script lato server è stato appena tornando la parola "completata" in formato testo, dadosResposta
sarebbe il "completed"
stringa.
In questo caso particolare, il dato è JSON, che permette ai dati di essere meglio organizzati in modo che i campi specifici possono essere accessibili come in dadosResposta.nsName
.
jQuery conosce la chiamata ha avuto successo quando la richiesta restituisce un codice di stato HTTP 200. Se il server non riesce a elaborare la richiesta, un codice di errore (ad esempio 500) deve essere restituito.
$.post
prende una funzione di callback. Quella di callback accetta un argomento, che è i dati restituiti dal server. Quindi, nel tuo caso, è dadosResposta
i dati restituiti dal server.
Si sa se ha avuto successo o no a causa del codice di stato nel header HTTP restituita (200 OK
in questo caso). È possibile includere un secondo argomento a vostra callback che conterrà lo stato.
Modifica Si sa perché è così che funziona jQuery. jQuery ottiene la risposta, e lo passa come parametro per il callback. Se vuoi sapere di più riguardo la struttura interna, leggere su XMLHttpRequest .