繁体   English   中英

Ajax返回false以形成表单

[英]Ajax return false to form

嗨,我想在用户注册我的网站时检查我的数据库,以确保他们选择的用户名不存在,并且是否告知他们。 我的以下代码无法正常运行,尽管无论我做什么,而且表单始终提交,ajax中的返回值似乎都不会返回到我的表单中。 为什么会这样呢? 感谢您的任何帮助

HTML

<form name="signup" action="Test1.php" onsubmit="return checkUser();" method="get">
Username: <input type="text" name="user" />
<input type="submit" value="Submit" />
</form>

使用Javascript

<script type="text/javascript" src="jquery-1.7.1.min.js"/></script>
<script type="text/javascript">
    function checkUser(){
        var userV = document.signup.user.value;
        $.ajax({
            url: "Test.php",
            type: "POST",
            data: {user:userV},
            success: function (response) {
                if(response=="0"){
                    //Username already exists notify user
                    return false;
                }else{
                    return true;
                }
            }
        });
    }
</script>

test.php的

<?PHP
    $user = $_POST['user'];
    if($user=="test"){
        die("0");
    }else{
        die("1")
    }
?>

Test1.php

<?PHP
    echo "Form submitted";
?>

您将return值放在ajax调用的success回调中,其执行被延迟直到服务器应答为止。

onsubmit="return checkUser();" checkUser()函数中期望true值或false值:

function checkUser(){

   if( stuff )
      return true;
   else
      return false;

}

无论如何,这是一个总体上不好的方法,因为它依赖于侵入性javascript。 更好的解决方案是将所有客户端逻辑移出标记:

HTML

<form name="signup" action="Test1.php" method="get">
    <label for="_user">Username:</label><input type="text" name="user" id="_user"/>
   <input type="submit" value="Submit" />
</form>

JS

<script>
// wrapping the code in a $(function(){ ... }); call delays its execution till document is loaded
$(function(){

$('form[name="signup"]').on('submit', function(event){

    // this prevents browser from actually following form url
    event.preventDefault();

    // a reference to the form to get used inside ajax callback
    var form = this;

    $.ajax({
         url: $(form).attr('action'),
         type: "POST",
         data: {user:$(form.user).val()},
         success: function (response) {
             if(response=="0"){

                alert('User exists!');

             }else{

                alert('User does not exist!');

             }
         }
     });

});

});
</script>

警报将是向用户发送的正确消息,或者是更复杂的验证-仅出于示例目的。

您在回调中返回false ,也就太“迟了”,因为在完成请求后将调用它。 考虑添加一个显式的e.preventDefault()return false到您的函数。 当前,它将返回undefined ,就像您在“ inner”函数中定义了return语句一样。

当然,您将需要手动导航到目标页面。

或将$.ajax()调用的async 参数显式设置为false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM