iron-ajax响应为php json响应返回null

问题描述:

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

<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每一次的 ajax的一部分。

在我的PHP我有。

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

无法弄清楚我做错了哪一部分。对于可能的愚蠢问题感到抱歉。

你这样做在PHP中都是错误的。首先json_encode将数组或对象编码为json字符串,它将会跳过你的字符串,但那不是你想要的。其次,您不返回[ ]括号,但无法使用JSON.parse进行解析,也不能在javascript中用作JSON Object

你应该发回JSON content-type,因为响应可能是不上钩槽JSON.parse,并期待一个真正的JSON,但在铁的AJAX文档handle-as="json"手段:

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

所以在使用XHR.responseTextJSON.parse元素iron-ajax解析JSON为对象,这意味着PHP头不是必需的,但你应该使用。

更改你的PHP代码是这样的:

<?php 

    $result = array('success' => 1); 

    header('Content-Type: application/json'); 
    echo json_encode($result); 
+0

感谢很多人:)真正解决我的问题,我学到了不少从答案。 – Burhan