我知道这里有很多这个问题。我花了一整天的时间来搜索同一个问题。没有什么可以回答我的!所以,请不要关闭这个说我只是复制的说法。
我有一个与另一个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 >
之前。
我现在非常绝望。有人可以帮忙吗?
答案 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] )
。