我试图从php文件发送的jquery中提取Json响应。 这是.js代码:
$.ajax({
url: 'index.php?page=register', //This is the current doc
type: 'POST',
datatype: 'json',
data: {'userCheck': username},
success: function(data){
// Check if username is available or not
},
error: function(){
alert('Much wrong, such sad');
}
});
这是来自php文件的响应:
if($sth->fetchColumn()!=0){
//$response = array("taken");
$response = array("username"=>"taken");
echo json_encode($response);
//echo '{"username':'taken"}';
}else{
//$response = array("available");
$response = array("username"=>"available");
echo json_encode($response);
//echo '{"username":"available"}';
}
我已经尝试了两种文件中我能想到的所有组合,但似乎没有任何效果。它是对数据库中用户名的简单检查。如果我通过控制台记录我从响应中得到的数据,我得到了这个:
{"username":"available"}<!DOCTYPE html>
// The rest of the page html
所以信息在那里,但我如何访问它?我在互联网上尝试了几种语法,但到目前为止还没有运气。我似乎记得一个json响应只能包含有效的json,那么问题是html吗?由于我的应用程序的结构,我不认为我可以避免这种情况,因此希望能够以我目前的结构访问json。
答案 0 :(得分:2)
修改强>
更改
datatype:"json",
不遵守参数名称的情况,t必须为T
dataType:"json",
现在请重试
$.ajax
({
url: 'index.php?page=register', //This is the current doc
type: 'POST',
dataType: 'json',
data: {'userCheck': username},
success: function(data)
{
// Check if username is available or not
switch(data.username)
{
case "available":
// do you want
break;
case "taken":
// do you want
break;
}
},
error: function()
{
alert('Much wrong, such sad');
}
});
PHP中的只是这样,并且不要忘记退出;避免在你的json响应中包含html页面! 这是在&#34; ....之后的代码,它会打破你的json输出 并通过javascript使其无法读取(更糟糕,它只是打破你的javascript!)
echo json_encode(["username"=> ($sth->fetchColumn()!=0) ? "taken":"available"]);
exit;
答案 1 :(得分:2)
当您回复AJAX调用时,您应该只返回JSON响应,而不是页面的HTML。添加:
exit();
在此代码之后,您不会在JSON之后显示HTML。
在JS代码中,使用if (data.username == 'available')
来判断用户名是否可用。
您的代码中的另一个问题是您在这里输入错误:
datatype: 'json',
应为dataType
,大写T
。
你也可以把:
header("Content-type: application/json");
在回显脚本中的JSON之前,jQuery会自动解析响应。
答案 2 :(得分:0)
此外,您可以在jQuery ajax调用中设置请求标头,之后的函数如下所示
{{1}}
因此,您严格声明数据类型为json