对不起,毫无疑问是一个非常基本的问题......但我没有找到可能重复的问题。
如果在使用$ .getJSON()调用的php脚本的末尾,我有一个这样的行:
return json_encode( $paras_of_interest );
...一切正常......直到有一些php输出(无意中被一个echo命令,或者可能是由于php代码生成的警告或错误)...然后完全禁用/停止/弄乱了JSON对象的返回。 处理这种情况的最佳方法是什么?如何找出输出的代码(即它“在哪里”?)......有没有办法配置输出在这种情况下的位置?
的后 的 对Dezigo和Salman A道歉:所有3个都是很好的答案,但我不得不选择一个
答案 0 :(得分:2)
您可以保存输出缓冲区(最后清除它)
<?php
ob_start();
echo "Hello ";
$out1 = ob_get_contents();
ob_end_clean();
var_dump($out1);
?>
答案 1 :(得分:1)
确保此行之前没有输出:
display_errors
指令设置为0和/或使用自定义错误处理程序ob_start
和ob_get_clean
)如果捕获到任何意外的输出/错误,请不要发送,但是在JSON响应中添加错误参数:
echo json_encode(array(
'result' => /* your original result here */,
'error' => /* error message here */
);
您的响应应始终如下所示,如果没有错误,则错误为null或false。在客户端,您将首先评估错误,然后评估结果。另外,如果发生错误,您可以发送HTTP 500状态代码,那么您应该能够使用JQuery的错误回调函数来处理错误:
$statusCode = $error ? 500 : 200;
header('content-type: application/json', true, $statusCode);
答案 2 :(得分:1)
如何找出输出的代码(即“去哪里”?)
打开浏览器的开发人员工具,然后打开页面并监控网络选项卡。您应该会在那里找到所有XHR。这包括破解的JSON响应。
此外,JavaScript库不会处理损坏的JSON。例如,jQuery将忽略此类响应并触发错误处理程序(如果已配置)。成功/错误处理程序可能允许您访问原始responseText
。