我正在向PHP文件发送一个JSON对象,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);
}
显示未定义的消息。我确信这是愚蠢的,但我看不出我做错了什么,你能帮忙吗?
答案 0 :(得分: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格式返回返回数据。实际上,这是一个通常的字符串。
如果我只是提醒(数据)正在返回{“edUsername”:“qqq” “edPassword”:“qqq”}但是如果我提醒警报(data.edUsername);我明白了 “未定义”?
JSON是一个常规字符串,应该在客户端解析。 jQuery将您的响应检测为纯文本或HTML,并且不会将JSON解析为Javascript对象。如果数据是对象,您将在警报窗口中获取[object Object]。
答案 1 :(得分:0)
我认为这应该是这种方式使用$.getJSON()
:
var str = $("#form_login").serialize();
$.getJSON("<?php echo URL; ?>ajax/checklogin", {data:str}, function(data){
alert(data.edUsername);
});