Ajax请求仅在第二次运行

时间:2016-03-18 14:41:09

标签: jquery ajax

我已经通过ajax创建了一个wp登录表单,但问题是它只能在第二次工作,即用户填写密码和用户名,点击提交,不起作用,如果他们再次单击提交,则确实如此。有什么建议吗?

jQuery(document).ready(function($) {

  // Perform AJAX login/register on form submit
  $('body').on('submit', 'form#login2', function(e) {
    if (!$(this).valid()) return false;
    $('form#login2 p.status').show().text(ajax_auth_object.loadingmessage);
    action = 'ajaxlogin';
    username = $('form#login2 #username').val();
    password = $('form#login2 #password').val();
    email = '';
    security = $('form#login2 #security').val();
    ctrl = $(this);
    $.ajax({
      type: 'POST',
      dataType: 'json',
      url: ajax_auth_object.ajaxurl,
      data: {
        'action': action,
        'username': username,
        'password': password,
        'email': email,
        'security': security
      },
      error: function(jqXHR, status) {
        $('form#login2 p.status').show().text('please try again');
      },

      success: function(jqXHR, status) {
        document.location.href = ajax_auth_object.redirecturl;
      }

    });
    e.preventDefault();
  });

});

1 个答案:

答案 0 :(得分:2)

您遇到的问题是您来电e.preventDefault()太晚了。它应该是处理程序的第一行:

  $('body').on('submit', 'form#login2', function(e) {
    e.preventDefault();
    if (!$(this).valid()) return false;
    // Other code omitted

   });

另外,另外,对于只有一个侦听器的情况,不再推荐使用preventDefault()方法。您应该使用stopPropagation()代替。