【问题标题】:Why doesn't JavaScript recognize this output from PHP?为什么 JavaScript 不能识别 PHP 的这个输出?
【发布时间】:2014-01-21 16:27:49
【问题描述】:

我让 jQuery 向 PHP 发帖,如下所示:

$.post("/contact/edit_contact", serialized).done(
    function(response) {
        if (response.success) {
            $('#row-' + id).html(response.html); 
        } else {
            alert("There was a problem saving");
        }

处理它的 PHP 返回这个响应(在网络选项卡中):

<div> 
    A bunch of HTML...
</div>

Warning: Cannot modify header information - headers already sent by (output started at /.../contact.controller.php:56) in /.../include/App.class.php on line 82

Call Stack:
    0.0005     683376   1. {main}() pathTo/index.php:0
    ....       
     pathTo/contact.controller.php:58
    0.6205    6286496   6. header() pathTo/App.class.php:82

{"success":true,"html":"<div>\n .... </div>"} 

但是当我执行console.log(response.success) 时,我得到“未定义”。

为什么 JavaScript/jQuery 承诺没有看到 response.success 设置为 true?

【问题讨论】:

  • 因为从整体上看,响应只是一个大杂烩,没有什么特别的。如果"success":true 部分嵌入到 Moby Dick 的文本中间,您会期望 jQuery 神奇地确定您的意思吗?
  • 问题是为什么 javascript 没有正确解析 PHP 产生的“标头已发送”错误?

标签: javascript php jquery


【解决方案1】:

因为在 JSON 格式的字符串之前有一堆东西。

为什么在 JSON 字符串之前输出 HTML(并尝试修改标头)?

【讨论】:

    【解决方案2】:

    这里有两件事很重要;首先,输出的代码必须包含您想要返回的 JSON。如果您删除之前输出的 HTML,您很可能还会解决返回的 PHP 错误。

    当您在从服务器返回时只有这个...

    {"success":true,"html":"<div>\n .... </div>"}
    

    ...您必须将其解释为 JSON。最好的方法是通过 PHP 发送标头:

    header("Content-Type: application/json; charset=utf-8");
    

    但在任何情况下,您都可以告诉 jQuery 将响应解释为 JSON,而不管在您的 done-function 中首先添加以下行:

    response = $.parseJSON(response);
    

    希望这会有所帮助!

    【讨论】:

    • 你也可以将'json'作为参数添加到$.post(在回调之后)告诉jQuery为你解析。
    • 您可以使用 json_encode 创建 JSON 格式的字符串。
    猜你喜欢
    • 1970-01-01
    • 2014-01-02
    • 2021-01-09
    • 1970-01-01
    • 2021-09-09
    • 2023-03-23
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    相关资源
    最近更新 更多