为什么Ajax响应有所不同?

时间:2017-03-07 22:02:38

标签: javascript jquery ajax

当我在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中没有得到一个?

1 个答案:

答案 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)
抱歉,这只是困扰我。