Php 从JSON返回未定义的Ajax-登录系统&;最佳做法
当我尝试在JSON中检索值时,收到一个未定义的错误。我是ajax/js等的新手,尝试创建一个“优雅”的下拉登录 我尝试过各种方法,读了一些我在这里找到的帖子,但是我注意到布局有所改变,我也注意到我正在使用success,现在已经不推荐了 因此,我可以寻求帮助,首先了解问题是什么,如何解决未定义的问题,其次是什么是实现这一目标的最佳方法。如果可以的话,我不想使用不推荐使用的代码 我还注意到,自从更改代码以使其进入ajax调用的“成功”区后,下拉框不再回滚或显示错误消息- 提前谢谢 阿贾克斯Php 从JSON返回未定义的Ajax-登录系统&;最佳做法,php,javascript,jquery,html,ajax,Php,Javascript,Jquery,Html,Ajax,当我尝试在JSON中检索值时,收到一个未定义的错误。我是ajax/js等的新手,尝试创建一个“优雅”的下拉登录 我尝试过各种方法,读了一些我在这里找到的帖子,但是我注意到布局有所改变,我也注意到我正在使用success,现在已经不推荐了 因此,我可以寻求帮助,首先了解问题是什么,如何解决未定义的问题,其次是什么是实现这一目标的最佳方法。如果可以的话,我不想使用不推荐使用的代码 我还注意到,自从更改代码以使其进入ajax调用的“成功”区后,下拉框不再回滚或显示错误消息- 提前谢谢 阿贾克斯 fun
function validLogin(){
$('.error').hide();
var username = $('#username').val();
if(username == ""){
$('label#usernameError').show();
$('input#username').focus();
return false;
}
$('.error').hide();
var password = $('#password').val();
if(password == ""){
$('label#passwordError').show();
$('input#password').focus();
return false;
}
var params = {username: username, password: password};
var url = "../js/loginProcessAjax.php";
$("#statusLogin").show();
$("#statusLogin").fadeIn(400).html('<img src="images/loading.gif" />');
$.ajax({
type: 'POST',
url: url,
data: params,
datatype: 'json',
beforeSend: function() {
document.getElementById("statusLogin").innerHTML= 'checking...' ;
},
success: function(data) {
alert("success Area ofAjax");
$("#statusLogin").hide();
if(data.success == true){
alert("if data.success Area of Ajax");
alert(data.message);
}else{
alert("data.message... " + data.message);//undefined
$("#errorConsole").html(data.message);
}
},
error: function( error ) {
console.log(error);
}
}, 'json');
}
函数validLogin(){
$('.error').hide();
var username=$('#username').val();
如果(用户名==“”){
$('label#usernamererror').show();
$('input#username').focus();
返回false;
}
$('.error').hide();
var password=$('#password').val();
如果(密码==“”){
$('label#passwordError').show();
$('input#password').focus();
返回false;
}
var params={username:username,password:password};
var url=“../js/loginProcessAjax.php”;
$(“#statusLogin”).show();
$(“#statusLogin”).fadeIn(400.html(“”);
$.ajax({
键入:“POST”,
url:url,
数据:params,
数据类型:“json”,
beforeSend:function(){
document.getElementById(“statusLogin”).innerHTML='checking…';
},
成功:功能(数据){
警报(“AJAX的成功区域”);
$(“#statusLogin”).hide();
if(data.success==true){
警报(“Ajax的if data.success区域”);
警报(数据、消息);
}否则{
警报(“data.message…”+data.message);//未定义
$(“#errorConsole”).html(data.message);
}
},
错误:函数(错误){
console.log(错误);
}
}“json”);
}
PHP
如果执行最后的else
块,则if/else/else/else链仅输出json。您需要将json_encode调用移到块外:
if (...) {
} else if (...) {
} else if (...) {
} else {
...
}
echo json_encode($data);
这样,无论实际执行的是各种if()子句中的哪一个,代码都将输出编码的$data。。您可能希望在这里显式地使用application/json的contentType
参数,这样就可以清楚地看到您正在发送和接收json
主要问题是,当向PHP发送未进行表单编码的POST数据时,$\u POST
不会自动填充。您需要像这样读取http原始输入:
$json = file_get_contents('php://input');
if(!empty($json)) { // replace your if($_POST) with this
$object = json_decode($json);
$username = $object->username;
$password = $object->password;
// the rest of your code
}
未定义错误的问题是:
datatype: 'json',
Javascript区分大小写,属性是dataType
而不是dataType
。正因为如此,jQuery没有被告知自动解析JSON,因此您只需要获取JSON字符串,从而导致data.message
上出现未定义的错误
此外,我看不到您在哪里访问$\u POST['username']
,也看不到您在哪里实例化$users
对象,我看到的是$username
,但看不到$\u POST['username']
FFS!睡眠剥夺--但仍然没有定义。正如这个答案所示,您应该对json进行编码,而不是解码;)抱歉,这两天太长了。更改为编码,清除缓存,重新加载,仍然未定义。错误处理程序中的console.log(错误)不能未定义。。。这就是xhr。不需要设置响应的内容类型,jQuery可以很好地确定响应数据类型。此外,jQuery的ajax函数会自动使用表单编码的内容类型进行post请求。从原始流读取不会解决javascript错误。。。这个答案似乎根本没有解决问题中描述的错误。就其本身而言,这并不是“错”,只是不是这里的解决方案(甚至不是相关的)。问题在于缺少json\u encode
,而不是$\u POST
@Chris的问题。响应数据类型已由其参数指定为json,因此在这种情况下不会尝试自动检测。contentType默认为application/x-www-form-urlencoded
,这是正确的。我只是想说明一下您在处理请求时使用的数据类型。从代码片段中,我不清楚他是否真的试图访问$\u POST变量,因为在使用表单编码的contentType时会填充这些变量。感谢您指出错误。我改变了这一点,没有未定义的消息,但目前它没有做很多其他事情。在控制台中,我看到了对象及其所有方法,但它似乎没有得到任何结果。用户名和密码是在调用ajax之前从一开始就获得的。或者,我有什么地方完全错了吗?在ajax成功函数中,它是进入if还是else?目前它没有进入成功部分。它似乎冻结在:beforeSend:function(){document.getElementById(“statusLogin”).innerHTML='checking…';},不,没有。在控制台中,我看到对象及其函数列表。没有别的
$json = file_get_contents('php://input');
if(!empty($json)) { // replace your if($_POST) with this
$object = json_decode($json);
$username = $object->username;
$password = $object->password;
// the rest of your code
}
datatype: 'json',