当我在console.log响应时,我找不到我的ajax响应不同的原因。有任何想法吗? Page1用于帐户更新表单,而page2用于注册表单。
page1.js:
function ajaxCheckDupEmail(){
if(valid_email === true){
return $.ajax({
type:'POST',
url:'ajax/page1.php',
data:{ 'email': email, 'email_login': email_login },
success:function(response){
//some code
}
});
}else{
//other code
}
}
$.when(ajaxCheckDupEmail()).done(function(a1){
console.log(a1);
if(a1[0] === 'false'){
//submitting form
//some code
}
});
注意:email和email_login是我存储userinput的js var,我使用valid_email检查电子邮件是否有效
page1.php中:
if(isset($_POST["email"]) && !empty($_POST["email"])){
$email = trim_strip_data($_POST["email"]);
$email_login = trim_strip_data($_POST["email_login"]);
$prep_data_email = $db->prepare("SELECT email FROM user WHERE email = :email");
$prep_data_email->execute(array(":email" => $email));
$row_count = $prep_data_email->rowCount();
if($row_count === 1 && $email !== $email_login){
echo "true";
}else{
echo "false";
}
}
注意:trim_strip_data()是一个自定义函数来修剪空格,虽然我不认为在这种情况下是必要的
page2.js:
function ajaxCheckDupEmail(){
if(valid_email === true){
return $.ajax({
type:'POST',
url:'ajax/page2.php',
data:{ 'email': email },
success:function(response){
// some code
}
});
}else{
//other code
}
}
function ajaxCheckDupUsername(){
if(username !== ""){
return $.ajax({
type:'POST',
url:'ajax/page2.php',
data:{ 'username': username },
success:function(response){
// some code
}
});
}else{
//other code
}
}
$.when(ajaxCheckDupUsername(), ajaxCheckDupEmail()).done(function(a1, a2){
console.log(a1);
console.log(a2);
if(a1[0] === 'false' && a2[0] === 'false'){
//submitting form
//some code
}
});
注意:电子邮件是我存储用户输入的js var,我使用valid_email检查电子邮件是否有效
使page2.php:
if(isset($_POST["email"]) && !empty($_POST["email"])){
$email = trim_strip_data($_POST["email"]);
$prep_data_email = $db->prepare("SELECT email FROM user WHERE email = :email");
$prep_data_email->execute(array(":email" => $email));
$row_count = $prep_data_email->rowCount();
if($row_count === 1){
echo "true";
}else{
echo "false";
}
}
if(isset($_POST["username"]) && !empty($_POST["username"])){
$username = trim_strip_data($_POST["username"]);
$prep_data_username = $db->prepare("SELECT username FROM users WHERE username = :username");
$prep_data_username->execute(array(":username" => $username));
$row_count = $prep_data_username->rowCount();
if($row_count === 1){
echo "true";
}else{
echo "false";
}
}
注意:trim_strip_data()是一个自定义函数来修剪空格,虽然我不认为在这种情况下是必要的
问题是我得到2个不同的响应结果(取决于结果是真/假)。
在page1.js中我得到:
true
在page2.js中我得到:
true,success,[object Object]
true,success,[object Object]
看起来我在page2.js中得到了一个响应对象,但为什么我在page1.js中没有得到一个?
答案 0 :(得分:0)
https://api.jquery.com/jquery.when/#jQuery-when-deferreds
你正在处理承诺,承诺总是会回报承诺。 所以我会仔细检查page1也没有返回对象。
E.g。打开开发工具并运行以下内容;
$.when().done(function( x ) { alert('done')});
你会看到它返回一个对象,这就是诺言。
但是
true,success,[object Object]
我没有看到success
来自哪里,你错过了一些代码吗?
旁注......
if(valid_email === true)
与
相同if(valid_email)
抱歉,这只是困扰我。