2013-03-12 69 views
3

我有一个登录表单,如果我提交使用传统的HTML表单后jQuery的AJAX .POST不工作自举

<form class="form-horizontal" id="loginform"> 
    <div class="control-group"> 
     <label class="control-label" for="user_name"> 
      Username or E-Mail 
     </label> 
     <div class="controls"> 
      <input type="text" id="user_name" name="user_name" autofocus> 
     </div> 
    </div> 
    <div class="control-group"> 
     <label class="control-label" for="password"> 
      Password 
     </label> 
     <div class="controls"> 
      <input type="password" id="password" name="password"> 
     </div> 
    </div> 
    <div class="control-group"> 
     <div class="controls"> 
      <label class="checkbox"> 
       <input type="checkbox">Remember me 
      </label> 
      <br> 
      <button type="submit" class="btn" id="submit_login"> 
       Sign-in 
      </button> 
     </div> 
    </div> 
</form> 

而不是由网页重定向工作正常,我想有用户登录并保持在同一页面上。我有以下jQuery来做到这一点

$(document).ready(function(){ 
    $("#submit_login").click(function(){ 
     var user_name = $("#user_name").val(); 
     var password = $("#password").val(); 
     $.post("login.php", {user_name: user_name, password: password}); 
    }); 
}); 

但这不是发布和我的会议不开始。我已经打印了jQuery'user_name'和'password'变量,并且他们从表单中提取了正确的值。 'login.php'文件寻找的变量也是'user_name'和'password'。运行脚本时没有控制台错误。

这是怎么造成的脱节?

+6

你不会阻止默认操作,因此正常的形式提交你开始导致中止请求,Ajax请求后会发生。 – 2013-03-12 14:45:43

+0

您是否检查过控制台以查看帖子是否实际发送?以及回应是什么?那个代码在收到服务器的响应后什么也不做,这是有目的的吗?哦,什么凯文B说 – cernunnos 2013-03-12 14:45:57

+0

@KevinB是正确的。或者你可以改变你的提交按钮从类型=“提交”,键入=“按钮”,它将不再尝试重定向。 – iAmClownShoe 2013-03-12 15:37:44

回答

2

这是一个jQuery val()方法和Bootstrap的btn类的组合,它默认将按钮设置为提交按钮。我切换

var user_name = $("#user_name").val(); 
    var password = $("#password").val(); 

var user_name = document.getElementById("user_name").value; 
    var password = document.getElementById("password").value; 

<button type="submit" class="btn" id="submit_login"> 

<button type="button" class="btn" id="submit_login"> 

和AJAX发挥预期。

的关键是改变“提交”按钮“,而不是仅仅删除类型分配都在一起。如果没有指定类型,默认键键入“提交”

2

您应该在发送您的$.post以避免默认表单提交之前立即阻止默认操作,否则您的$.post将(在大多数情况下)中止。

$(document).ready(function(){ 
    $("#submit_login").click(function(event){ 
     event.preventDefault(); // stop form submit 
     var user_name = $("#user_name").val(); 
     var password = $("#password").val(); 
     $.post("login.php", {user_name: user_name, password: password}); 
    }); 
}); 
+0

嗨凯文,我增加了event.preventDefault(),但后仍然没有提交。任何其他的想法可能是错的? – 2013-03-13 15:40:42

+0

你在php方面做过任何调试吗? – 2013-03-13 15:45:37

+0

是的,这不是PHP相关的,因为我可以提交表单没有AJAX – 2013-03-13 15:47:09