繁体   English   中英

无法读取PHP返回的JSON对象

[英]Cannot read JSON object returned from PHP

我正在将JSON对象发送到PHP文件,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);   
}

显示未定义的消息。 我敢肯定这是愚蠢的,但我看不到自己在做错什么,您能帮忙吗?

我没有为$.post()设置dataType。 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”},但是如果我警报alert(data.edUsername); 我得到“未定义”?

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

我认为应该使用$.getJSON()

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM