JQuery $ .post - Desde el servidor al cliente - ¿cómo se sabe cuál es la respuesta a conseguir?

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

  •  30-09-2019
  •  | 
  •  

Pregunta

Así que tenemos esto:

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

Desde el cliente al servidor: Es envía 'sameValue' a testeUpdate.php usando POST.

En caso de éxito, que recibe los datos devueltos por el script del lado del servidor y hacer algo con eso en el lado del cliente. Correcta?

Hay algo entre la secuencia de comandos del lado del servidor y este guión lado del cliente que ahora no recibo.

Pregunta: ¿Cómo dadosResposta se llena con los datos devueltos por el guión serverside? ¿Cómo se sabe? ¿Cómo funciona? Tal vez la pregunta puede ser planteada: ¿cómo hacer jQuery sabe cuando algo es "en caso de éxito"

O tratar de otra manera: El servidor ejecuta la secuencia de comandos, devuelve algunos datos codificados en JSON. Hasta aquí bien. Después de esto, ¿qué sucede? ¿Cómo podemos saltar a la parte del lado del cliente nuevo?

[Actualización] Intentando otra vez: Sé que: dadosResposta contiene cualquiera que sea el script del lado del servidor vuelve mi pregunta es, COMO lo hace sabe de eso? ¿Cómo lo hace? [/ Actualizar]

Muchas gracias, MEM

¿Fue útil?

Solución

La función .post jQuery utiliza un objeto XMLHttpRequest para acceder a la URL transferida a ella. Los responde servidor, ya sea con un 200 OK (correcto) o alguna otra respuesta (presumiblemente fracaso).

En caso de éxito, el objeto XMLHttpRequest tiene su conjunto de propiedades responseText (o responseXML) a los datos devueltos por el servidor. El jQuery función que controla la respuesta luego mira a su argumento dataType de las escenas-detrás-para determinar qué hacer con los datos devueltos. En el caso de tu ejemplo, se intenta analizar en un objeto.

Suponiendo que la respuesta es una cadena JSON válida, entonces se pasa ese objeto recién creado a su función de devolución de llamada como su primer (y único) argumento, que usted ha nombrado dadosResposta.

que es como jQuery obtiene sus datos en dadosResposta.

Editar Aquí hay un código que es probablemente vagamente parecido a lo que está pasando:

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

Otros consejos

El parámetro de la función de devolución de llamada (dadosResposta en este caso) contiene cualesquiera que sean los retornos de script del lado del servidor. Por ejemplo, si el script del lado del servidor se acaba volviendo la palabra "completado" en texto plano, dadosResposta sería el "completed" cadena.

En este caso particular, los datos se JSON, que permite que los datos a ser mejor organizados de manera que los campos específicos se puede acceder como en dadosResposta.nsName.

jQuery sabe la llamada fue cuando la solicitud devuelve un código de estado HTTP 200. Si el servidor no puede procesar la solicitud, un código de error (es decir, 500) debe ser devuelto.

$.post toma una función de devolución de llamada. Devolución de llamada que toma un argumento, que son los datos devueltos por el servidor. Así, en su caso, dadosResposta son los datos devueltos por el servidor.

Se sabe si ha tenido éxito o no por el código de estado HTTP en el encabezado devuelto (200 OK en este caso). Se puede incluir un segundo argumento en su devolución de llamada que contendrá el estado.

EDIT: Se sabe porque así es como funciona jQuery. jQuery obtiene la respuesta, y lo pasa como un parámetro a su devolución de llamada. Si desea saber más sobre el funcionamiento interno, leer sobre XMLHttpRequest .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top