返回JSON,因为无法识别对此请求的响应。
request = $.ajax({
url: "form_handler.php",
type: "post",
dataType: "json",
data: serializedData
});
form_handler.php
中的php代码返回响应:
if ($success) {
echo json_encode(array("success"=>"false"), JSON_PRETTY_PRINT);
}
else
{
echo json_encode(array("success"=>"true"), JSON_PRETTY_PRINT);
}
因此在:
request.done(data)
{
alert(data.success); // error: cannot read property of 'success' of null
}
答案 0 :(得分:1)
该代码看起来不错,但是在ajax调用本身处理它可能有助于调试你的问题。
$.ajax({
url: "form_handler.php",
type: "post",
dataType: "json",
data: serializedData,
success: function(data){
console.log(data);
console.log(data.success);
console.log($.parseJSON(data));
}
});
如果您有一个响应对象,请添加您的响应对象,以便我们可以看到结构 - 我会更新我的答案。
答案 1 :(得分:0)
你必须发送JSON标题,在你的php文件中设置
header('Content-Type: application/json');
echo json_encode(array("success"=>"false"), JSON_PRETTY_PRINT);
答案 2 :(得分:0)
这是Ajax请求:
jquery.ajax({
type: "POST",
url: url,
data: data,
success: function(serverData) {
var data = JSON.parse(serverData);
callback(data);
}
});
Php回应:
echo json_encode(array('success' => 'true'));
答案 3 :(得分:0)
我将此作为回复和评论的总结。
正如@jetawe和@FelixKling指出的那样,最佳做法是指定响应的Content-Type,所以在php脚本的头部添加:
header('Content-Type: application/json');
@hindmost指出,由于jqXHR.done()
实际被调用,脚本没有失败。
我的猜测是,当$.ajax
自动解码时,解码json对象失败(因为dataType: "json"
)
正如@PaulRoub注意到的那样,PHP版本5.4中存在JSON_PRETTY_PRINT
所以,如果你有一个旧版本的PHP,那个常量不会存在,抛出级别为E_NOTICE
的错误,假设值为null
。将null
(等于0)作为值json_encode
传递无论如何都会起作用(假设默认行为)
我的第二个猜测是你有display_errors = 1
和error_reporting = E_ALL
所以PHP正在打印出破坏json的错误。
我希望我猜对了!