2017-03-07 41 views
0

我无法找到为什么我的ajax响应不同,当我console.log响应。有任何想法吗? 第1页用于帐户更新表单,第2页用于注册表单。Ajax响应如何不同?

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_login是一个JS变种,我userinput存储,我用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变种,我userinput存储,我用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个不同的响应re sults(取决于结果的真假)。

在page1.js我得到:

true 

在page2.js我得到:

true,success,[object Object] 

true,success,[object Object] 

它看起来像我得到了一个page2.js响应对象,但为什么我不在page1.js中获得一个?

回答

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) 

对不起,这只是烦我。

+0

我提醒了两个答复,但我得到了与我的问题中所述相同的结果。我不错过任何代码。 – Thoaren