问题 混淆了jquery .ajax .done()函数


我对如何使用ajax .done()函数感到有点困惑。我正在验证一个表单以检查用户是否存在于数据库中,尽管ajax是最好的方法(仍在学习它)。我有一个php文件,如果用户存在则返回true,如果用户不存在则返回false。如何将布尔值传递给done函数的参数?

$(".check").blur(function(){
  var username = $(".check").val();
  $.ajax({
    url: "validateUser.php",
    type: "post",
    data: "username= " + username
  }).done(function(result){
    if (result == true){
      // User exists
    }else{
      // User doesn't exist
    }
  });
});

我希望这是有道理的。我尽力解释它。


1378
2018-04-18 06:31


起源

我对你提出的问题感到有些困惑,上述情况不起作用吗? - dt192
@DanielTillin我在jquery网站上看到了一个类似于我的例子,但我编辑它以最适合我,但我不确定他们从哪里获得'result'参数。 - Vince
结果是从帖子返回的数据,但返回的数据是一个字符串,因此如果这是你的php文件输出,你将匹配'true'或'false'引用 - dt192
@DanielTillin它有点工作。由于某种原因,它只返回用户不存在,这与我使用jquery验证引擎时遇到的问题相同。它只会返回用户不存在(即使它们确实存在),所以我决定编写自己的函数...这不是很好。我基本上回到原点。 - Vince
我把它放在一起,我的工作正常,生病在下面 - dt192


答案:


我认为应该是结果=='true',因为结果是数据字符串

我刚刚检查过,我是正确的,引号使其成功

PHP:

<?php

if($_POST['username']=='sambob'){echo 'true';}else{echo 'false';}

?>

使用Javascript

username='sambob';

$(".check").blur(function(){
  $.post("validateUser.php", { username: username })
  .done(function(data) {
     if (data == 'true'){
        alert("User exists");
     }else{
        alert("User doesn't exist"); 
     }
  });
});

json PHP

<?php

if($_POST['username']=='sambob'){echo'{"exists":true}';}
                            else{echo'{"exists":false}';}
?>

json Javascript

$(".check").blur(function(){
   $.post("validateUser.php", { username : username },
   function(user){
      if (user.exists == true){
         alert("User exists");
      }else{
         alert("User doesn't exist");
      }
   }, "json");
});

7
2018-04-18 06:38



好吧,所以我将你拥有的东西与我拥有的东西进行了比较,结果发现错误出现在我的PHP代码中。当我返回真假时,我没有用引号括起来,我没有回应它们。我改用了返回。 - Vince
大声笑,这是我从一开始就告诉你的:-) - dt192
没有probs,我自己去过那里很多次,总是那些很难追查的简单事情,祝你好运;-) - dt192
嗯,我不同意这个事实,即true应该是一个字符串,它应该是一个布尔值。我之前从未遇到过麻烦,只是使用 JSON 一切都会按预期工作。 - soyuka
除非另有说明,否则通过ajax函数返回的数据总是以字符串形式返回,因此它永远不会是正确的,不是默认设置 - dt192


在你的PHP方面,你应该回应一些 json string,例如,我会这样做 validateUser.php :

//Check your database etc.
$user_exists = array('error'=>false,'user'=>true);
echo json_encode($user_exists);

而不是与jQuery:

$.ajax({
    url: "validateUser.php",
    type: "post",
    data: "username= " + username,
    dataType: "json",
  }).done(function(result){
    if (result.error == false){
        //No errors, check user
        if(result.user == true)
            alert("Exists"); //now do some stuff
        else
            alert("User don't exists");
    }else{
      // There is an error
    }
  });

5
2018-04-18 06:36





成功:它将返回XHR成功状态,例如:200
完成:一旦XHR获得成功,它将完成并返回返回数据

试试下面的代码

 $.ajax({
type: "POST",
url: Url,
data: dataParameter,
async: true,
success: function(results, textStatus) {
    debugger;
    console.log("success : " + results);
},
error: function(xhr, status, error)
{
    console.log("error : " + xhr.responseText);                   
}
}).done(function(results) {
    debugger;          
    console.log("done : " + results);           
});

0
2017-11-23 19:48