当我尝试在JSON中检索值时,我收到一个未定义的错误。我是ajax / js等的新手,试图创建一个“优雅”的下拉登录。
我已经尝试了各种各样的东西,并阅读了我在这里找到的一些帖子,但我注意到布局有所改变,我也注意到我正在使用成功,现在已经弃用了。
我可以请求帮助,首先要了解问题是什么以及如何解决未定义的问题,其次是实现这一目标的最佳方法。如果我能提供帮助,我宁愿不使用弃用的代码。
我还注意到,自从更改代码以使其进入ajax调用的“成功”公园后,下拉框不再回滚或显示错误消息。 -.-
提前致谢。
Ajax
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');
}
PHP
<?php
if($_POST){
if($users->userExists($username) === false){
$data['message'] = "User doesn't exist";
$data['success'] = false;
}else if($users->userExists($username) === false){
$data['message'] = 'That username does not exist';
$data['success'] = false;
}else if($users->emailActivated($username) === false){
$data['message'] = 'You need to activate the account, please check your email.';
$data['success'] = false;
}else{
$login = $users->login($username, $password);
if($login === false){
$data['message'] = 'Incorrect Password or username';
$data['success'] = false;
}else{
$data['success'] = true;
//destroy old session and create new - prevents session fixation attacks
session_regenerate_id(true);
//all details are correct - the method returns the id to be sotred as a session
$_SESSION['id'] = $login;
}
echo json_decode($data);
}
}
标记:
<form method="post" action="" id="ourLoginFormID_JS">
<div class="ourContactFormElement2">
<label for="username">Username:</label>
<input type="text" id="username" name="username" autocomplete="off" class="required" value="<?php if(isset($_POST['username'])) echo htmlentities($_POST['username']); ?>" />
</div>
<div class="ourContactFormElement2">
<label for="password">Password:</label>
<input type="password" id="password" name="password" autocomplete="off" class="required"/>
</div>
<div class="ourContactFormElement2">
<label> </label>
<input type="submit" name="loginButton" id="loginButton" value="Login!" onclick="validLogin(); return false;"/>
</div>
<div id="statusLogin"></div>
</form>
答案 0 :(得分:2)
如果最后else
块执行,则if / else / else / else链仅输出json。您需要在块外移动json_encode调用:
if (...) {
} else if (...) {
} else if (...) {
} else {
...
}
echo json_encode($data);
这样你的代码就会输出编码的$ data,无论各种if()子句实际执行的是什么。
答案 1 :(得分:1)
未定义错误的问题是:
datatype: 'json',
Javascript区分大小写,属性为dataType
而不是datatype
。因此,jQuery没有被告知自动解析JSON,所以你只是获取JSON字符串,导致data.message
上的未定义错误。
此外,我看不到您访问$_POST['username']
的位置或实例化$users
对象的位置,我看到$username
但未$_POST['username']
。
答案 2 :(得分:-1)
有几件事。您可能希望在此明确使用application / json的contentType
参数,以便明确您发送和接收JSON。
主要问题是,在将POST数据发送到非形式编码的PHP时,$_POST
将不会自动填充$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
}
。您需要读取http原始输入:
{{1}}