无法读取从PHP返回的JSON对象

时间:2013-02-05 10:36:48

标签: php jquery ajax json

我正在向PHP文件发送一个JSON对象,PHP做了一些操作并返回一个JSON字符串:

$('button#indexOpener').on('click', function() {
    var aUsername = $('input#edUsername').val();    
    var aPassword = $('input#edPassword').val();

    if (($.trim(aUsername) != '') && ($.trim(aPassword) != '')) {
        var str = $("#form_login :input").serializeArray();
        $.post("<?php echo URL; ?>ajax/checklogin", str, function(data) {
            alert(data.edUsername); 
        }); 
    }
    else {
        alert('Please insert a valid username and password');
        alert("<?php echo URL; ?>/ajax");   
    }
});

PHP回应了一个JSON对象:

echo json_encode($_POST);

但是当我尝试使用jQuery警告数据时:

function(data) {
  alert(data.edUsername);   
}

显示未定义的消息。我确信这是愚蠢的,但我看不出我做错了什么,你能帮忙吗?

2 个答案:

答案 0 :(得分:3)

我看不到为$.post()设置的数据类型。 jQuery将尝试识别返回的内容类型,但您需要设置正确的标头。所以,你需要添加:

header("Content-Type: application/json");
echo json_encode之前

,或者你应该在JS代码中设置dataType:“json”($.post()的第四个参数):

$.post("<?php echo URL; ?>ajax/checklogin", str, function(data) {
    alert(data.edUsername); 
}, "json");

这样,jQuery就会知道返回的数据是JSON格式,应该进行解析。没有它,jQuery将检查Content-Type标头并根据它应用解析器。假设如果没有设置自定义内容类型标头,它将以HTML格式返回返回数据。实际上,这是一个通常的字符串。

  

如果我只是提醒(数据)正在返回{“edUsername”:“qqq”   “edPassword”:“qqq”}但是如果我提醒警报(data.edUsername);我明白了   “未定义”?

JSON是一个常规字符串,应该在客户端解析。 jQuery将您的响应检测为纯文本或HTML,并且不会将JSON解析为Javascript对象。如果数据是对象,您将在警报窗口中获取[object Object]。

答案 1 :(得分:0)

我认为这应该是这种方式使用$.getJSON()

var str = $("#form_login").serialize();

$.getJSON("<?php echo URL; ?>ajax/checklogin", {data:str}, function(data){
     alert(data.edUsername); 
});