我们假设这是在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();
我期待发生以下情况(由于数据包丢失,连接问题等):
但是,我真正担心的是这样的情况:
这些情况可能吗?
答案 0 :(得分:4)
简而言之:不,那是不可能的。 HTTP基于TCP,保证数据的传递。服务器和客户端都会意识到会导致某些数据丢失的问题。 TCP层将根据需要重新传输数据,直到完成为止。
因为没有规则说路由器必须转发所有数据包,但TCP会自动纠正这些问题,因此没有规则说丢包和乱序交付并不少见。
答案 1 :(得分:2)
这些情况都不会发生。
数据包丢失在协议栈的较低级别进行管理。
通过互联网,TCP负责每个数据包的完整性,并且所有数据包都以正确的顺序正确到达。
在协议栈的更高级别,HTTP有一个名为Content-Length
的响应头,它告诉浏览器返回内容的大小,浏览器使用它来确保响应是完整。
但是,某些HTTP请求可以使用Transfer-Encoding: chunked
标头来回答,这会导致Content-Length
无用。这些是持久连接,并且在事先不知道内容的长度时使用它们。
您是否有任何在抵达时数据未完成的案例?
答案 2 :(得分:0)
我不确定我是否真的理解你的问题,但是如果响应以某种方式被截断(但是返回 - 即,服务器仍然以200状态响应),则它将不是有效的JSON。
从您的问题中不清楚data.txt
如何“只有一个字符串”但仍然有效。