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");

从客户端到服务器:是使用邮政发送给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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top