如果没有返回json对象,php输出在哪里

时间:2013-02-26 09:51:43

标签: php ajax json

对不起,毫无疑问是一个非常基本的问题......但我没有找到可能重复的问题。

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

return json_encode( $paras_of_interest );

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

的 对Dezigo和Salman A道歉:所有3个都是很好的答案,但我不得不选择一个

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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 */
    );
    
  3. 您的响应应始终如下所示,如果没有错误,则错误为null或false。在客户端,您将首先评估错误,然后评估结果。另外,如果发生错误,您可以发送HTTP 500状态代码,那么您应该能够使用JQuery的错误回调函数来处理错误:

    $statusCode = $error ? 500 : 200;
    header('content-type: application/json',  true, $statusCode);
    

答案 2 :(得分:1)

  

如何找出输出的代码(即“去哪里”?)

打开浏览器的开发人员工具,然后打开页面并监控网络选项卡。您应该会在那里找到所有XHR。这包括破解的JSON响应。

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

,具体取决于JavaScript库