我们假设这是在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()调用的promise将被执行,但返回给它们的数据为空.
但是,我真正担心的是这样的情况:
> Ajaxcall.php执行并且$_POST [‘data’] [‘txt’]具有预期值,但$_POST [‘data’] [‘ary’]缺少某些值.
>执行$.ajax()调用的promise并且data.ary具有期望值,但data.txt只是半个字符串(例如,“ok t”).
这些情况可能吗?
解决方法:
简而言之:不,那是不可能的. HTTP基于TCP,保证数据的传递.服务器和客户端都会意识到会导致某些数据丢失的问题. TCP层将根据需要重新传输数据,直到完成为止.
因为没有规则说路由器必须转发所有数据包但TCP会自动纠正这些问题,因此数据包丢失和无序传输在互联网上并不少见.
标签:jquery,json,php,ajax
来源: https://codeday.me/bug/20190517/1121916.html