0

我知道这里有很多这个问题。我花了一整天的时间来搜索同一个问题。没有什么可以回答我的!所以,请不要关闭这句话,我只是在重复。
我有一个与另一个 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 文件在 < !doctype html > .
我现在好绝望。有人可以帮忙吗?

4

3 回答 3

4

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

header("Content-type: application/json");
于 2012-08-04T04:48:21.177 回答
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) }  
})
于 2012-08-04T04:54:07.373 回答
2

我想你可以很容易地做到这一点..

发送第四个json参数$.post()for dataType

$.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()是:

$.post( url [, data] [, success(data, textStatus, jqXHR)] [, dataType] )

你必须指定最后一个参数dataType

于 2012-08-04T04:55:04.760 回答