0

我将 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);   
}

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

4

2 回答 2

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 形式返回返回数据。实际上,这是一个常见的字符串。

如果我只是 alert(data) 返回 {"edUsername":"qqq" "edPassword":"qqq"} 但如果我提醒 alert(data.edUsername); 我得到“未定义”?

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

于 2013-02-05T10:56:30.293 回答
0

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

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

$.getJSON("<?php echo URL; ?>ajax/checklogin", {data:str}, function(data){
     alert(data.edUsername); 
});
于 2013-02-05T11:01:01.190 回答