2013-04-29 120 views
0

我需要一些帮助。我发送简单的请求到服务器,并且我期望的返回值是JSON作为数据类型。但是当我检查开发工具控制台日志时,我得到“parsererror SyntaxError {}”和“parsererror”。语法错误{} AJAX成功无法读取PHP返回的JSON

我该如何解决这个问题?以下是代码。

JQuery的

$(':submit').live('click', function() { 

    $.ajax({ 

      type : 'post',   
      url: 'testJSON.php', 
      beforeSend:console.log('sending...'), 
      dataType: 'json', 
      contentType: "application/json; charset=utf-8", 
      success: function(data){ 

       console.log(data.status); 
       // do magic 
       }, 

      error: function(XMLHttpRequest, textStatus, errorThrown) { 

       console.log(textStatus, errorThrown); 

       }, 

      complete: function(XMLHttpRequest, status) { 

       console.log(status); 

       } 

     }); 

    return false; 
    }); 

,这是testJSON.php

<?php 

$data = array(

    "status" => 1, 
    "firstname" => "foo", 
    "lastname" => "bar", 

); 

header('Content-type: application/json; charset=utf-8" '); 
echo json_encode($data); 


exit(); 

?> 

仅供参考我使用最新版本的WAMP的。非常感谢任何帮助。

+0

请注意,您的JSON无效,并且您已发布除JSON之外的所有内容;-) – 2013-04-29 11:03:37

+0

@ÁlvaroG.Vicario我不确定您的无效JSON是什么意思......如果你的意思是为什么我发送请求到服务器没有JSON,只是因为需要运行PHP脚本的数据存储在$ _SESSION [] – ani 2013-04-29 14:28:12

+0

你说你得到'parsererror'时解析JSON ...对不起,如果我误解了。 – 2013-04-29 15:05:37

回答

0

从这里

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

删除"应该

header('Content-type: application/json; charset=utf-8'); 
+0

通过设置'dataType:'json''数据已被(企图)解析 – 2013-04-29 10:57:29

+0

@GeenHenk是的我注意到,谢谢你纠正错误... :) – 2013-04-29 11:00:44

+0

@GeenHenk我已经删除它,但仍然得到parsererror SyntaxError { }在我的日志中... – ani 2013-04-29 14:12:50

1

设置内容类型的JSON的头......这里是设置头型的例子。

header('Cache-Control: no-cache, must-revalidate'); 
header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); 
header('Content-type: application/json'); 

在jQuery 1.4以上版本中,JSON数据以严格的方式被解析。

任何格式错误的JSON都会被拒绝并引发解析错误。

+0

我正在使用jQuery 1.8.3。我尝试这个解决方案,但代码仍然无法正常工作。我运行php脚本的预览数据成功转换为JSON类型,我不明白为什么AJAX无法接收它,有什么想法? – ani 2013-04-29 14:38:11

0

我试过你的代码,并且在beforeSend参数中出现错误。声明应封装在一个函数中:

...  
beforeSend: function() {console.log('sending...')}, 
... 

之后,一切正常。也许它也取决于jQuery版本。你使用了哪一个?我尝试过版本1.8.1及以上版本

+0

我正在使用V 1.8.3。和代码为我工作..原因我使用这个参数,以便我知道AJAX工作的第一个地方(以及代码是... beforeSend:console.log('发送...')。 .. without function(){}) – ani 2013-04-29 14:05:04