【问题标题】:jquery click function is responding weirdly. ajax call also not triggeredjquery click 函数响应奇怪。 ajax调用也没有触发
【发布时间】:2016-09-25 02:18:14
【问题描述】:

以某种方式触发了GET,而不是POST 请求。

其次,没有调用 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

【问题讨论】:

  • 但这没有任何意义。我没有将任何操作与表单相关联。
  • 我删除了我的评论并添加了ab answer以便更好地解释,这绝对是你的问题
  • 尝试将其移出表单。还是一样的问题
  • 通过添加 type=button 和按钮解决。谢谢 DelightedD0D。
  • 如果问题得到解决,别忘了选择一个答案来关闭问题;)

标签: javascript jquery ajax


【解决方案1】:

因为你的按钮在form标签里面并且它没有type属性,所以它作为一个提交按钮并在调用ajax之前提交表单(默认表单方法是GET)

详情:

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

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

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

另外:

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

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

这将确保即使用户禁用了 javascript 也可以登录,这通常是一种很好的做法。

【讨论】:

  • 是的,它有效。感谢您的回答。但是请您详细解释一下这个问题。这将非常有帮助。
  • actionmethod属性未指定时,the browser assumes the action is the page itself, and the method is GET。而且由于您的按钮没有type="button" 属性,因此它被视为提交按钮(这是&lt;button&gt; 元素的默认角色)。通过将按钮设置为type="button",您可以有效地防止表单被提交。但是,使用方法 POST 作为登录表单的属性仍然被认为是一种很好的做法。
  • @Terry 在他们的评论中击败了我,但我会更新我的答案以包含详细信息:)
  • 鼓励 OP 明确指定表单操作和方法属性会很好;) 有用户,即使数量非常少,禁用了 JS——表单应该调用脚本(本身或另一个)也可以执行登录服务器端,而不需要 AJAX :)
  • @Terry 确实,添加了 ty:)
【解决方案2】:

问题出在这里:

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{

            }
        }
    });

【讨论】:

  • 你能试试这个吗? var dataString = 'name=' + name + '&amp;password=' + password; 然后data: dataString,
  • @DelightedD0D 类型是方法的别名,它适用于旧版本,因此它可能是旧版本没有获取方法参数并忽略它并使用 get 代替。
  • 允许,但提交任何 ajax 请求永远不会导致 get 参数在浏览器的 URL 栏中可见。 OP 显示的屏幕截图只是表明根本没有调用 AJAX,而是直接提交了实际表单
【解决方案3】:

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

var obj = { 用户名:un,密码:pwd };

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

数据类型:'json', 数据:JSON.stringify(obj)

希望对您有所帮助。

【讨论】:

  • 我刚刚添加了一个控制台日志图像。 Ajax 调用稍后在函数中出现。日志命令不起作用。这是在ajax调用之前。所以这不可能。此外,我使用了这种在 ajax 中发送变量的方法。可以使用 $_POST["var"]; 在 php 文件中访问它们。方法。作为键值,所以这也不是问题。
  • data: {name:name, password:password}, 完全有效
  • 页面中的javascript是否与HTML一起加载
  • 如果你的控制台日志没有执行,页面上可能没有加载JS代码
猜你喜欢
  • 2011-03-11
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
相关资源
最近更新 更多