如果发送/接收jQuery AJAX数据,是否可以只接收一些数据?

时间:2013-07-18 20:56:27

标签: php jquery ajax json

我们假设这是在jQuery中执行的:

$.ajax({
    url : 'ajaxcall.php',
    data : { 'data' : { ary : [1,2,3,3,4,5], txt : "ima let u finish" } },
    dataType : 'json',
    type : 'post',
    timeout : 10000
});

ajaxcall.php包含:

$return_obj = array();
$return_obj['ary'] = array(9,8,7,6,5);
$return_obj['txt'] = "ok then";

echo json_encode($return_obj);
die();

我期待发生以下情况(由于数据包丢失,连接问题等):

  • Ajaxcall.php执行,但$ _POST变量为空。
  • 执行$ .ajax()调用的承诺,但返回给它们的数据为空。

但是,我真正担心的是这样的情况:

  • Ajaxcall.php执行且$ _POST ['data'] ['txt']具有预期值,但$ _POST ['data'] ['ary']缺少某些值。
  • 执行$ .ajax()调用的承诺,data.ary具有预期值,但data.txt只有半个字符串(例如,“ok t”)。

这些情况可能吗?

3 个答案:

答案 0 :(得分:4)

简而言之:不,那是不可能的。 HTTP基于TCP,保证数据的传递。服务器和客户端都会意识到会导致某些数据丢失的问题。 TCP层将根据需要重新传输数据,直到完成为止。

因为没有规则说路由器必须转发所有数据包,但TCP会自动纠正这些问题,因此没有规则说丢包和乱序交付并不少见。

答案 1 :(得分:2)

这些情况都不会发生。

数据包丢失在协议栈的较低级别进行管理。

通过互联网,TCP负责每个数据包的完整性,并且所有数据包都以正确的顺序正确到达。

在协议栈的更高级别,HTTP有一个名为Content-Length的响应头,它告诉浏览器返回内容的大小,浏览器使用它来确保响应是完整。

但是,某些HTTP请求可以使用Transfer-Encoding: chunked标头来回答,这会导致Content-Length无用。这些是持久连接,并且在事先不知道内容的长度时使用它们。

您是否有任何在抵达时数据未完成的案例?

答案 2 :(得分:0)

我不确定我是否真的理解你的问题,但是如果响应以某种方式被截断(但是返回 - 即,服务器仍然以200状态响应),则它将不是有效的JSON。

从您的问题中不清楚data.txt如何“只有一个字符串”但仍然有效。