jquery点击功能很奇怪。 ajax调用也没有触发

时间:2016-05-26 21:55:10

标签: javascript jquery ajax

而不是POST请求,不知何故GET被触发。

其次,没有调用ajax调用。

我已经这样做了一百次,但我尝试的一切似乎什么也没做。这可能是某种程度上我的错,但请帮忙。如果您还需要更多信息,请询问。此致

$(document).ready(function(){
    console.log("bro");
    $("#login").click(function () {
        console.log("hi");
        var name = $('#uname').val();
        var password = $('#password').val();
        console.log(name);
        console.log(password);
        $.ajax({
            url:"login-check.php",
            data: {name:name, password:password},
            dataType:"text",
            method:"POST",
            success:function(data){
                if(data === "1" || data === "2"){
                    alert(data);
                    console.log("hello");
                    window.open('index.php','_self');
                }
                else{

                }
            }
        });
    });
});

HTML:

<!-- Form Code -->
<div class = "container">
    <h2 style="text-align:center;">Please Fill the form to Sign up</h2>
    <form class="form-horizontal">
        <div class="form-group">
            <label class="control-label col-sm-2" for="name">Username:</label>
            <div class="col-sm-10">
                <input type = "username" class = "form-control" name = "uname" id = "uname" placeholder = "username" required autofocus>
            </div>
        </div>
        <div class="form-group">
            <label class="control-label col-sm-2" for="pwd">Password:</label>
            <div class="col-sm-10">          
                <input type = "password" class = "form-control" name = "password" id = "password" placeholder = "password" required>
            </div>
        </div>
        <div class="form-group">        
            <div class="col-sm-offset-2 col-sm-10">
                <button class="btn btn-primary" name = "login" id="login">Sign In</button>
            </div>
        </div>
     </form>

     Click here to clean <a href = "logout.php" tite = "Logout">Session.

</div>

console logs network logs

3 个答案:

答案 0 :(得分:1)

因为您的按钮位于form标记内且没有type属性,所以它在提交按钮并在调用ajax之前提交表单(默认表单方法是GET)顺便说一句)

详细说明:

  • 默认情况下,不显式设置method属性的表单是 使用GET方法提交
  • 默认情况下,button标记内未明确设置form属性的任何type都将设置为type="submit"
  • 因为您未在html中设置任何属性,所以当您单击按钮时,它会在触发点击处理程序以调用ajax之前使用GET方法提交表单

要纠正此问题,有3个选项:

  1. 在按钮上明确声明type="button"(这就是我要做的)
  2. 在点击处理程序顶部调用e.preventDefault以取消提交实际表单的默认行为
  3. 将按钮移到form标签之外(你说你试过这个没有成功,但它确实有效see this jsFiddle所以我想你没有把它移动得足够远)
  4. Additonally:

    正如Terry在评论中提到的那样,您还应该在表单上明确设置actionmethod属性,如:

    <form action="login-check.php" method="post" class="form-horizontal">
    

    这将确保即使用户已禁用javascript也能正常登录,并且通常是一种良好的做法。

答案 1 :(得分:-1)

问题在于:

method:"POST",

应该是:

type: "POST",

数据类型的定义是:

contentType: "text/plain",

编辑:ajax调用的完整代码

var dataString = 'name=' + name + '&password=' + password;
    $.ajax({
        type: "POST",
        url:"login-check.php",
        data: dataString,
        success: function(data){
            if(data === "1" || data === "2"){
                alert(data);
                console.log("hello");
                window.open('index.php','_self');
            }
            else{

            }
        }
    });

答案 2 :(得分:-2)

我认为问题在于你的ajax调用的定义。 我建议像这样传递一个json对象:

var obj = {username:un,密码:pwd};

然后你可以通过字符串化将这个对象传递给调用:

dataType:'json', data:JSON.stringify(obj)

希望有所帮助。