簡體   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