Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery$.post-从服务器到客户端-它如何知道要得到什么响应?_Jquery_Ajax_.post - Fatal编程技术网

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

Jquery$.post-从服务器到客户端-它如何知道要得到什么响应?,jquery,ajax,.post,Jquery,Ajax,.post,因此,我们有: $.post('testeUpdate.php', 'someValue' function(dadosResposta) { $('#ns-nome').val(dadosResposta.nsName); $('#ns-endereco').val(dadosResposta.nsAddress); }, "json"); 从客户端到服务器: Is使用POST将“sameValue”发送到tes

因此,我们有:

$.post('testeUpdate.php', 'someValue'
        function(dadosResposta) {
            $('#ns-nome').val(dadosResposta.nsName);
            $('#ns-endereco').val(dadosResposta.nsAddress);
        },
"json");
从客户端到服务器: Is使用POST将“sameValue”发送到testeUpdate.php

成功后,它接收服务器端脚本返回的数据,并在客户端对其进行处理。对吗

在服务器端脚本和这个客户端脚本之间有一些我不了解的东西

问题: 从服务器端脚本返回的数据如何填充dadosResposta? 它怎么知道?它是如何工作的? 也许还会有人提出这样的问题:jquery如何知道什么时候事情“成功了”

或者尝试另一种方式: 服务器端执行脚本,返回一些json格式的编码数据。直到这里,好的。在这之后,会发生什么?我们如何再次跳转到客户端部分

[更新] 重试: 我知道:dadosResposta包含服务器端脚本返回的任何内容我的问题是,它如何知道这一点?他是怎么做到的? [/更新]

非常感谢,
MEM

$。post
接受回调函数。该回调采用一个参数,即从服务器返回的数据。因此,在您的例子中,
dadosResposta
是从服务器返回的数据

它知道它是否成功,因为返回了HTTP头中的状态代码(
200OK
)。您可以在回调中包含第二个参数,该参数将包含状态


编辑:它知道,因为jQuery就是这样工作的。jQuery获取响应,并将其作为参数传递给回调。如果您想了解更多关于内部的信息,请继续阅读。

回调函数中的参数(
dadosResposta
在本例中)包含服务器端脚本返回的内容。例如,如果服务器端脚本只是以纯文本形式返回单词“completed”,则
dadosResposta
将是字符串
“completed”


在这种特殊情况下,数据是JSON,这使得数据可以更好地组织起来,以便可以访问特定字段,如
dadosResposta.nsName
中所示

当请求返回http状态码200时,jQuery知道调用已成功。如果服务器无法处理请求,则应返回错误代码(ie 500)。

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();
}

谢谢。请注意我对初始问题的[更新]部分。感谢您提供额外的标题信息。“它知道,因为jQuery就是这样工作的”。。。Naaa。这不是答案,是吗然而,它使用的XMLHttpRequest似乎就是答案。我仍然不知道jquery是如何做到这一点的。我知道它会使用XMLHttpRequest,但仅此而已。我想我不能在这里得到我的答案。如果我这样做,我可能不会马上得到它。提前感谢。:)我无意冒犯,但我觉得我对下面发生的事情有一个很好的解释。@MEM我之所以说“因为它就是这样工作的”是因为你问“它怎么知道的”。这有点像当你说
x=3
时,问JavaScript如何“知道”你想要
x
成为
3
。它知道,因为它就是这样工作的;JavaScript就是这样定义的。也许我应该说“它知道,因为函数就是这样定义的”。@Skilldrick:)即使这样也不是答案。。。然后我会问:“函数是如何定义的,以便我能够理解,它是如何工作的?”:)很常见,这不是耐心与否的问题我仍然对Ryan Kinal的回答有疑问,比如:“XMLHttpRequest是如何知道的?但这不是我所问的,所以我把这个疑问留给了自己。”)非常感谢。请注意我在初始问题上的[update]部分。非常感谢。请注意我的[update]第一个问题的一部分。对不起,我不太清楚你在问什么。你是在问它如何知道如何将其格式化为JSON吗?
$.post()
的最后一个参数指定为“JSON”,我假设服务器端脚本的内容类型头是
application/json
.np DLH。无论如何,这是一个很难做出的决定,我很抱歉我的澄清能力很差尽管如此,一切都很顺利我的代码中的哪一部分让您做出这样的假设:“在您的示例中,它试图将其解析为对象。”?非常感谢。您对
$的最后一个参数是
json
。这意味着该函数将假设服务器返回一个JSON字符串,然后jQuery将该字符串解析为一个对象(假设它是一个有效的JSON字符串)。这有助于我开始了解这里发生了什么我很乐意帮忙!(另外,这里还有关于XMLHttpRequest对象的更多信息:)