[英]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.