所以我们有这个:
$.post('testeUpdate.php', 'someValue'
function(dadosResposta) {
$('#ns-nome').val(dadosResposta.nsName);
$('#ns-endereco').val(dadosResposta.nsAddress);
},
"json");
从客户端到服务器: 是使用POST向testeUpdate.php发送'sameValue'。
成功时,它接收服务器端脚本返回的数据,并在客户端执行该操作。正确的吗?
服务器端脚本和此客户端脚本之间存在一些我无法获得的内容。
问题: dadosResposta如何填充从服务器端脚本返回的数据? 它怎么知道的?它是如何工作的? 也许这个问题也可能提出来:jquery如何知道什么时候“成功”?
或尝试其他方式: 服务器端执行脚本,在json中返回一些编码数据。直到这里好。在此之后,会发生什么?我们如何再次进入客户端部分?
[更新] 再试一次: 我知道: dadosResposta包含服务器端脚本返回的任何内容我的问题是, HOW 它知道吗?他是怎么做到的? [/更新]
非常感谢, MEM
答案 0 :(得分:5)
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();
}
答案 1 :(得分:1)
$.post
采用回调函数。该回调接受一个参数,即从服务器返回的数据。因此,在您的情况下,dadosResposta
是从服务器返回的数据。
它知道它是否成功,因为返回的HTTP头中的状态代码(在这种情况下为200 OK
)。您可以在回调中包含第二个参数,其中包含状态。
编辑:它知道因为这是jQuery的工作原理。 jQuery获取响应,并将其作为参数传递给您的回调。如果您想了解有关内部的更多信息,请阅读XMLHttpRequest。
答案 2 :(得分:1)
回调函数中的参数(本例中为dadosResposta
)包含服务器端脚本返回的内容。例如,如果服务器端脚本只是以纯文本形式返回单词“completed”,则dadosResposta
将是字符串"completed"
。
在这种特殊情况下,数据是JSON,它允许更好地组织数据,以便可以像dadosResposta.nsName
中那样访问特定字段。
答案 3 :(得分:1)
当请求返回http状态代码200时,jQuery知道调用成功。如果服务器无法处理请求,则应返回错误代码(即500)。