Jquery $ .post - с сервера к клиенту - как он знает, какой ответ получить?

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

  •  30-09-2019
  •  | 
  •  

Вопрос

Так что у нас есть это:

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

От клиента к серверу: отправляет «SameValue» для testeupdate.php, используя сообщение.

На успех он получает данные, возвращаемые на стороне бокового скрига сервера и сделайте что-то с этим на стороне клиента. Верный?

Существует что-то между скриптом бокового сервера и этот сценарий на стороне клиента, который я не получаю.

Вопрос:Как DadosResposta заполняется данными, возвращаемыми из сценария серверида? Как он знает? Как это работает?Возможно, вопрос также может быть предложена: как jQuery знает, когда что-то «на успех»?

Или попытка по другому способу: сторона сервера выполняет скрипт, возвращает некоторые закодированные данные в JSON. До здесь хорошо. После этого что происходит? Как мы снова прыгаем в боковую часть клиента?

Обновление] Попытка снова: я знаю, что: DadosResposta содержит все возможное, чтобы сценарий на стороне сервера возвращается Мой вопрос в том, КАК Знает ли он об этом? Как он это делает? [/Обновить

Спасибо много, МЕМ

Это было полезно?

Решение

Jquery. .post Функция использует объект XMLHTTPREQUEST для доступа к URL-адресу, который вы передали ему. Сервер отвечает либо 200 OK (успех) или какой-то другой ответ (предположительно отказ).

На успех объект XMLHTTPREQUEST имеет его responseText (или responseXML) Свойство, установленное на данные, возвращаемые сервером. Функция jQuery за спиной, которая обрабатывает ответ, то смотрит на ваш dataType аргумент, чтобы определить, что делать с возвращенными данными. В случае вашего примера он пытается разбирать его в объект.

Предполагая, что ответ - это действительная строка JSON, то она передает этот вновь созданный объект к вашим функциям обратного вызова в качестве первого (и только) аргумента, который вы назвали dadosResposta.

Тот как jQuery получает ваши данные в dadosResposta.

Редактировать:Вот какой-то код, который, вероятно, смутно сготовка к тому, что происходит:

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

Другие советы

Параметр в функции обратного вызова (dadosResposta В этом случае) содержит независимо от того, что серверный скрипт возвращается. Например, если скрипт на стороне сервера просто возвращал слово «Завершено» в простом тексте, dadosResposta будет строка "completed".

В этом конкретном случае данные JSON, что позволяет лучше организовывать данные, так что конкретные поля могут быть доступны как в dadosResposta.nsName.

jQuery знает, что вызов был успешным, когда запрос возвращает код состояния HTTP 200. Если сервер не обрабатывает запрос, должен быть возвращен код ошибки (т. Е. 500).

$.post принимает функцию обратного вызова. Этот обратный вызов принимает один аргумент, который являются данными, возвращаемыми с сервера. Итак, в вашем случае, dadosResposta Является ли данные возвращены с сервера.

Он знает, было ли это успешно или нет из-за кода состояния в заголовок HTTP (200 OK в таком случае). Вы можете включить второй аргумент в вашем обратном вызове, который будет содержать статус.

РЕДАКТИРОВАТЬ: Это знает, потому что так работает jQuery. jQuery получает ответ, и передает его как параметр на ваш обратный вызов. Если вы хотите узнать больше о внутренних органах, прочитайте Xmlhttprequest..

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top