JQuery $ .ajax请求json响应

时间:2014-08-20 13:31:35

标签: php jquery ajax json

返回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 
}

4 个答案:

答案 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 = 1error_reporting = E_ALL所以PHP正在打印出破坏json的错误。

我希望我猜对了!