Jquery $ .post - 从服务器到客户端 - 它如何知道要获得什么响应?

时间:2010-08-20 13:21:58

标签: jquery ajax .post

所以我们有这个:

$.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

4 个答案:

答案 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)。