【发布时间】:2013-07-18 00:13:36
【问题描述】:
假设这是在 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”)。
这些情况可能吗?
【问题讨论】:
-
这意味着 PHP 代码做错了——要么错误地编码 JSON 错误(但更可能的数据不是预期的),要么返回成功标头并过早终止流(这会产生无效的 JSON )。 jQuery AJAX 的成功回调仅在成功所有数据传输后调用。
-
是的 - 打开浏览器调试器 NETWORK 面板并查看返回的响应。查看响应是否格式错误或不完整。