这是我想要实现的部分例子。
我正在尝试从ajax中检索一个值,但是javascript result.success变量是未定义的。我有以下内容:
PHP:
$result = array ("success" => null, "html" => "");
$result['success'] = true;
$result['html'] = "test";
echo json_encode($result);
的Javascript / jQuery的:
var ID = 1
$.ajax({
type: 'POST',
url: '/ajax/load.php',
contentType: "application/json; charset=utf-8",
datatype: 'json',
data: {ID: ID},
beforeSend: function(xhrObj) {
xhrObj.setRequestHeader("Content-Type","application/json");
xhrObj.setRequestHeader("Accept","application/json");
},
success: function(result) {
if (result.success) {
// do something
}
});
我从ajax获取的响应(从chrome dev工具中检索)是{“success”:true,“html”:“Test”}
这对我来说很好,但是在JavaScript result.success中是未定义的。我相信这很简单我只是看不出问题所在。
答案 0 :(得分:2)
您的错误在这里:
datatype: 'json',
Javascript区分大小写,属性为dataType
:
dataType: 'json',
因此,jQuery没有被告知自动解析JSON,因此结果只被视为html或纯文本。
您还需要删除内容类型标头,因为它指定了请求未响应的内容类型。您正在发送请求中编码的表单/网址,而不是JSON。
答案 1 :(得分:1)
$.ajax({
type: 'POST',
url: '/ajax/load.php',
contentType: "application/json; charset=utf-8",
dataType: 'json',
data: {ID: ID},
beforeSend: function(xhrObj) {
xhrObj.setRequestHeader("Content-Type","application/json");
xhrObj.setRequestHeader("Accept","application/json");
},
success: function(result) {
if (result.success) {
// do something
}
} // Maybe your forgot this
});
换句话说 - 基本调试
答案 2 :(得分:0)
在你的PHP页面中将它放在页面顶部(你只接受json响应,但你的响应头内容类型可能是text / html
header('Content-type: application/json');