我有一个PHP函数,它应该将JSON对象返回给AJAX调用,但它返回了一个字符串。这是我从 AJAX 调用调用的 PHP。
<?php
echo json_encode(array("error", 0, "Success!"));
?>
下面是 AJAX 调用。
$.ajax({
type: "POST",
url: "../api/login.php",
data: { id: username, password: password },
success: function(response) {
alert( "Data Saved: " + response );
$("#login_username").val("");
$("#login_password").val("");
}
});
当此函数返回时,我尝试在控制台中访问响应,这就是发生的事情
response
> "["error",0,"Success!"]"
response[0]
> "["
如果你需要一个对象,那么在 ajax 设置中指定dataType:json
。它还将确保如果从服务器发送任何无效的 JSON,它就会因解析错误而出错。很可能你没有在你的响应头中指定内容类型(application/json; charset=utf-8
),这让jquery可以确定mime类型本身,所以指定dataType
以确保你得到一个对象或一个错误返回(在无效的JSON的情况下)。
$.ajax({
type: "POST",
dataType:'json'
url: "../api/login.php",
data: { id: username, password: password },
success: function(response) {
alert( "Data Saved: " + response );
$("#login_username").val("");
$("#login_password").val("");
}
});
你的实现似乎正在使用jQuery,或者jQuery的某种模型。如果不使用jQuery,我很乐意分享更多针对您的问题的解决方案。
添加数据类型
$.ajax({
dataType: 'json',
type: "POST",
url: "../api/login.php",
data: { id: username, password: password },
success: function(response) {
alert( "Data Saved: " + response );
$("#login_username").val("");
$("#login_password").val("");
}
});
问题是,默认情况下,jQuery需要一个字符串。
var foo = "bar";
foo[1] === "a"; // true
文档: jQuery.ajax
在你的
ajaxcall中添加一个参数
$.ajax({
type: "POST",
url: "../api/login.php",
data: { id: username, password: password },
dataType: "json" //-< add this param.
success: function(response) {
alert( "Data Saved: " + response );
$("#login_username").val("");
$("#login_password").val("");
}
});
http://api.jquery.com/jQuery.post/