1

抱歉,毫无疑问,这是一个非常基本的问题……但我还没有找到可能的重复问题。

如果在使用 $.getJSON() 调用的 php 脚本的末尾,我有这样一行:

return json_encode( $paras_of_interest );

...一切正常...直到有一些php输出(无意中通过echo命令,或者可能是由于php代码生成了警告或错误)...然后完全禁用/停止/弄乱了返回 JSON 对象。处理这种情况的最佳方法是什么?如何找出输出了什么代码(即它“去哪里”?)......在这种情况下,有没有一种方法可以配置输出去哪里?

后来 向 Dezigo 和 Salman 道歉 A:所有 3 个都是很好的答案,但我必须选择一个

4

3 回答 3

2

您可以保存输出缓冲区(结束清理它)

<?php

ob_start();

echo "Hello ";

$out1 = ob_get_contents();

ob_end_clean();

var_dump($out1);
?>

http://www.php.net/manual/en/function.ob-get-contents.php

于 2013-02-26T09:57:01.800 回答
1
  1. 确保在此行之前没有输出:

    • 对于错误,将display_errors指令设置为 0 和/或使用自定义错误处理程序
    • 对于异常,使用 try/catch 块
    • 对于其他输出,如果有的话,使用输出缓冲(ob_startob_get_clean
  2. 如果您捕获到任何意外的输出/错误,请不要发送它,而是在您的 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);
于 2013-02-26T10:14:15.377 回答
1

如何找出输出了什么代码(即它“去”到哪里?)

打开浏览器的开发者工具,然后打开页面并监控网络选项卡。您应该会在此处找到所有 XHR 记录。这包括损坏的 JSON 响应。

此外,JavaScript 库不处理损坏的 JSON。例如,jQuery 将忽略此类响应并触发错误处理程序(如果已配置)。根据 JavaScript 库,成功/错误处理程序可能会让您访问原始的responseText.

于 2013-02-26T10:35:51.090 回答