Jquery $ .post - с сервера к клиенту - как он знает, какой ответ получить?
Вопрос
Так что у нас есть это:
$.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..