【问题标题】:iron-ajax response returns null for php json responseIron-ajax 响应为 php json 响应返回 null
【发布时间】:2016-09-24 21:12:14
【问题描述】:

我是以下代码中的聚合物 1.0 的初学者,当 Iron-ajax 的响应触发时,我试图从我的 php 文件中获取 json 响应。我通过编辑 php 尝试了不同的响应,但它总是在我的控制台日志中显示 null。 ajax部分代码

<iron-ajax
        id="ajax"
        method="POST"
        url="post_tip.php"
        handle-as="json"
        on-response="postResponse"
        >
    </iron-ajax>

处理响应的代码的脚本部分

postResponse: function(r){
            console.log(r.detail.response);
            if(r.detail.response.success==1){
                console.log('Tip posted');
            }
            else{console.log('Error occured.not posted');}
        }

我找不到任何错误,但 r.detail.response 每次都返回 null。

在我的 php 上我有。

$resp = '{"success":1}';
echo $resp;
echo json_encode($resp);

无法弄清楚我做错了哪一部分。对不起,可能是愚蠢的问题。

【问题讨论】:

    标签: javascript php json ajax polymer-1.0


    【解决方案1】:

    你在 php.ini 中做错了。首先,json_encode 会将数组或对象编码为 json 字符串,它会转义您的字符串,但这不是您想要的。其次,您在没有[ ] 括号的情况下返回两次,该括号不能用JSON.parse 解析,也不能在javascript 中用作JSON Object

    你应该发回 JSON content-type,因为响应可能没有被 JSON.parse 吸引,并期待一个真正的 JSON,但在 Iron-ajax 文档中 handle-as="json" 的意思是:

    json:使用 XHR.responseText 解析为 JSON。

    因此iron-ajax 元素使用XHR.responseText 上的JSON.parseJSON 解析为对象,这意味着PHP 标头不是必需的,但您应该使用。

    像这样改变你的 php 代码:

    <?php
    
        $result = array('success' => 1);
    
        header('Content-Type: application/json');
        echo json_encode($result);
    

    【讨论】:

    • 非常感谢 :) 这确实解决了我的问题,我从答案中学到了很多东西。
    猜你喜欢
    • 2015-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多