我有一个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]
> "["
答案 0 :(得分:4)
如果您需要一个对象,请在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("");
}
});
答案 1 :(得分:2)
您的实现似乎是使用jQuery或jQuery的一些模型。如果它不使用jQuery,我将很乐意为您的问题分享更多解决方案。
添加dataType
$.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
答案 2 :(得分:1)
在你的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("");
}
});