$ .parseJSON(数据)不起作用

时间:2012-08-04 04:29:49

标签: jquery json

我知道这里有很多这个问题。我花了一整天的时间来搜索同一个问题。没有什么可以回答我的!所以,请不要关闭这个说我只是复制的说法。
我有一个与另一个js文件在同一页面上调用的PHP文件,这个PHP文件对一个数组进行编码并在同一页面上回显它(就像从ajax请求中调用它一样):

$data = array(  
    "status" => $status,  
    "message" => $message,
);  

echo json_encode($data);

$ status和$ message的值由它们之上的某些条件决定(这里并不重要)。此PHP文件在索引文件的顶部调用,这意味着JSON在<!doctype html>标记之前回显。现在,在js文件中,这是我尝试处理这个JSON的部分:

$.post($formUrl, $formData, function(data) {
  $data = $.parseJSON(data);
  alert($data.status);
});

不要担心变量,它们不是问题。这里唯一的问题是$data = $.parseJSON(data);部分。 当我运行此代码时。成功时没有任何反应,但在PHP文件中,有一个插入命令可以正确执行数据库。一切正常,除了这个JSON,我无法得到它! 当我尝试这个时:

$.post($formUrl, $formData, function() {
  $str = '{"a":1,"b":2,"c":3,"d":4}';
  $data = $.parseJSON($str);
  alert($data.a);
});

它按预期工作,它提醒1.所以我认为问题是,$.parseJSON()无法解析其中包含JSON的HTML文件,因为正如我告诉你的那样,PHP文件回应了JSON就在 < !doctype html > 之前。
我现在非常绝望。有人可以帮忙吗?

3 个答案:

答案 0 :(得分:4)

这里的问题是您正在从PHP脚本中输出JSON,该页面也回显HTML。您需要一个专门回应JSON的PHP脚本。此外,在PHP文件中,您可能希望发送JSON MIME类型:

header("Content-type: application/json");

答案 1 :(得分:2)

尝试在json_encode之后立即做一个骰子。你可以将整个事情包装在if语句中,该语句将检查$ _POST是否为空。所以在第一次加载时,你只需要获得html,但是在ajax帖子上你只得到了json。

也尝试使用它:

$.ajax({
    url: $url,
    data: $formData,
    type: "POST",
    dataType: "json", // this tells jquery to expect json back, and parses it automatically
    success: function(data) { alert(data.status) }  
})

答案 2 :(得分:2)

我认为你可以轻松实现..

json的第四个参数发送至$.post()的{​​{1}}。

dataType

$.post() 的语法是:

$.post($formUrl, $formData, function(data) {

  // after specifying the dataType you 
  // don't need to parse is manually by $.parseJSON()
  // jQuery will parse it for you

  // $data = $.parseJSON(data); //  remove this line

  console.log(data);

}, 'json');

您必须指定最后一个参数$.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )