jQuery $ .. post-从服务器到客户端 - 它如何知道要获得什么响应?
题
所以我们有这样的:
$.post('testeUpdate.php', 'someValue'
function(dadosResposta) {
$('#ns-nome').val(dadosResposta.nsName);
$('#ns-endereco').val(dadosResposta.nsAddress);
},
"json");
从客户端到服务器:是使用邮政发送给testeupdate.php的“ samevalue”。
成功时,它接收了服务器端脚本返回的数据,并在客户端对此进行操作。正确的?
我没有得到的服务器端脚本和此客户端脚本之间有一些东西。
问题:Dadosresposta如何填充从Serveride脚本返回的数据?它怎么知道?它是如何工作的?也许也可能提出问题:jQuery如何知道什么时候“成功”?
或以另一种方式尝试:服务器端执行脚本,返回JSON中的一些编码数据。直到这里还好。之后,发生了什么?我们如何再次跳入客户端?
更新]再次尝试:我知道: dadosresposta包含服务器端脚本返回的任何内容 我的问题是, 如何 它知道吗?他怎么做? [/更新
非常感谢,mem
解决方案
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
.
当请求返回HTTP状态代码时,jQuery知道该呼叫是成功的。如果服务器未能处理该请求,则应返回错误代码(IE 500)。
$.post
采用回调功能。该回调采用一个参数,即从服务器返回的数据。因此,就您而 dadosResposta
是从服务器返回的数据。
它知道它是否成功,因为返回的HTTP标头中的状态代码(200 OK
在这种情况下)。您可以在回调中包含第二个参数,其中包含状态。
编辑: 它知道,因为那是jQuery的工作方式。 jQuery获得了响应,并将其作为参数传递给您的回调。如果您想了解更多有关内部的信息,请阅读 xmlhttprequest.