Jquery $ .post - Du serveur au client - comment il sait quelle réponse obtenir?

StackOverflow https://stackoverflow.com/questions/3531182

  •  30-09-2019
  •  | 
  •  

Question

Nous avons donc ceci:

$.post('testeUpdate.php', 'someValue'
        function(dadosResposta) {
            $('#ns-nome').val(dadosResposta.nsName);
            $('#ns-endereco').val(dadosResposta.nsAddress);
        },
"json");

du client au serveur: Est envoie 'sameValue' à l'aide testeUpdate.php POST.

En cas de succès, il reçoit les données renvoyées par le script côté serveur et à faire quelque chose avec que du côté client. Correct?

Il y a quelque chose entre le script côté serveur et ce script côté client que je ne reçois pas.

Question: Comment dadosResposta est rempli avec les données renvoyées à partir du script de Serverside? Comment ça sait? Comment ça marche? Peut-être que la question peut aussi être posée: comment faire jquery sait quand quelque chose est « le succès »

Ou essayer une autre façon: Le côté serveur exécute le script, retourne des données encodées en JSON. Jusqu'à ici ok. Après cela, ce qui se passe? Comment pouvons-nous sauter dans la partie côté client à nouveau?

[mise à jour] Essayer à nouveau: Je sais que: dadosResposta contient tout ce que les déclarations de script côté serveur ma question est, Comment ne le sait à ce sujet? Comment fait-il ça? [/ Mise à jour]

Merci beaucoup, MEM

Était-ce utile?

La solution

La fonction .post jQuery utilise un objet XMLHttpRequest pour accéder à l'URL que vous a été transmis. Le serveur répond par un 200 OK (succès) ou une autre réponse (échec sans doute).

En cas de succès, l'objet XMLHttpRequest a sa propriété responseText (ou responseXML) ensemble aux données renvoyées par le serveur. Le derrière les coulisses fonction jQuery qui gère la réponse se penche ensuite sur votre argument dataType pour déterminer ce qu'il faut faire avec les données renvoyées. Dans le cas de votre exemple, il tente d'analyser dans un objet.

En supposant que la réponse est une chaîne JSON valide, il passe ensuite cet objet nouvellement créé à votre fonction de rappel comme premier (et seul) argument que vous avez nommé dadosResposta.

que comment jQuery obtient vos données dans dadosResposta.

Edit: Voici un code qui est probablement proche de ce que vaguement ce qui se passe:

$.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();
}

Autres conseils

Le paramètre dans la fonction de rappel (dadosResposta dans ce cas) contient quelles que soient les déclarations de script côté-serveur. Par exemple, si le script côté serveur était juste retour le mot « terminé » dans le texte brut, dadosResposta serait la chaîne "completed".

Dans ce cas particulier, les données JSON, qui permet aux données d'être mieux organisées de façon que les champs spécifiques sont accessibles que dans dadosResposta.nsName.

jQuery sait que l'appel a réussi lorsque la demande renvoie un code d'état HTTP 200. Si le serveur ne parvient pas à traiter la demande, un code d'erreur (par exemple 500) doit être retourné.

$.post prend une fonction de rappel. Ce rappel prend un argument, qui est les données renvoyées par le serveur. Donc, dans votre cas, dadosResposta est les données renvoyées par le serveur.

Il sait si elle a réussi ou non à cause du code d'état dans l'en-tête HTTP renvoyé (200 OK dans ce cas). Vous pouvez inclure un second argument dans votre rappel qui contiendra l'état.

EDIT: Il sait parce que comment fonctionne jQuery. jQuery obtient la réponse, et il passe comme paramètre à votre rappel. Si vous voulez en savoir plus sur les entrailles, lire sur XMLHttpRequest .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top