Ajax响应如何不同?
问题描述:
我无法找到为什么我的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中获得一个?
答
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)
对不起,这只是烦我。
我提醒了两个答复,但我得到了与我的问题中所述相同的结果。我不错过任何代码。 – Thoaren