2013-02-05 190 views
0

我送一個JSON對象到PHP文件返回時,PHP做一些操作,並返回一個JSON字符串:無法讀取JSON對象從PHP

$('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); 
} 

是顯示消息不確定的。我相信這是愚蠢的,但我看不出我做錯了什麼,你能幫忙嗎?

+0

你檢查控制檯,實際上是否返回的數據?另外:在客戶端或服務器端的任何錯誤? – Sirko

+0

嘗試console.log(數據),以便您可以看到整個結構 –

+0

'$(「#form_login:input」)。serializeArray();'它不應該是這樣的:'$(「#form_login」)。 serializeArray();' – Jai

回答

3

我看不到dataType設置爲$.post()。 jQuery將嘗試識別返回的內容類型,但您需要設置正確的標題。所以,你需要添加:

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

之前,還是應該設置數據類型: 「JSON」 的JS代碼(的$.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對象。在數據是對象的情況下,您會在警報窗口中獲得[對象對象]。

+0

我試過你的建議,但沒有奏效。謝謝您的回覆。 – user1536396

+0

請注意,我最初在頭部代碼中犯了一個錯誤。但現在它已更新。一旦你在數據中獲得json字符串,唯一的問題是jquery不會將它轉換爲對象。 dataType:「json」和內容類型頭應該可以解決這個問題。 –

+0

對不起,我錯誤輸入標題,你的解決方案工作。謝謝大家的幫助 – user1536396

0

我想這應該是這種方式使用$.getJSON()

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

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