jQuery表单提交返回false而不是等待服务器响应

jQuery form submission is returning false instead of waiting for server response

本文关键字:等待 服务器 响应 表单提交 返回 false jQuery      更新时间:2023-09-26

我有一个jQuery表单,它在验证后将数据发送到服务器。服务器发送一个响应,然后我的站点处理返回的信息。下面是问题中的javascript:

$("#signup").on('submit', function(e){
          var isvalidate = $("#signup").valid();
          if(isvalidate)
          {
            var json =  $('#signup').serialize();
            var theEmail = $('#signup #inputEmail').val();
            //Hide step 1 modal
            $('#stepOneSignup').modal('hide');
            //Open processing modal
            $('#processingModal').modal();
            $.post('http://localhost:5000/agm/saveNewUser/', json, function( data ) {
              alert('returned some data');
              if(data === "Success"){
                //Hide processing modal
                $('#processingModal').modal('hide');
              }else if(data === "UserExists"){
                $('#processingModal').modal('hide');
                $('#duplicateEmail').modal();
              }
            });
          }else{
            return false;
          }
      });

我可以在我的服务器日志中看到$.post(http://localhost...)发布得很好。我的服务器正在处理表单信息(这需要几秒钟),但在它有机会发送响应之前,我的表单将浏览器重定向到:

http://localhost:8888/?firtName=whateverinfoIputintheform&lastName=yeahyeahyeah

我从来没有得到一个alert('returned some data');

你知道这是怎么回事吗?

我认为你的ajax调用是异步的。试着做点什么:用下面的代码替换ajax调用:

$.ajax({
  type: "POST",
  url: 'http://localhost:5000/agm/saveNewUser/',
  data: json,
  dataType: 'text',
  async: 'false',
  success: function(){
    alert('returned some data');
              if(data === "Success"){
                //Hide processing modal
                $('#processingModal').modal('hide');
              }else if(data === "UserExists"){
                $('#processingModal').modal('hide');
                $('#duplicateEmail').modal();
              }
  }
});

return true;

您应该在任何情况下return false,以防止默认的post-back:

$("#signup").on('submit', function(e){
    var isvalidate = $("#signup").valid();
    if(isvalidate)
    {
        ...
    }
    return false;
});

它正在引起ajax post请求,但不能处理它的响应,因为默认的post-back原因在ajax post的响应被接收之前。

$.post()是一个ajax方法。浏览器将不会等待响应,并将继续工作,就好像服务器从未发出请求一样。

  $.post('http://localhost:5000/agm/saveNewUser/', json, function( data ) {
        ...
    }).done(function(){
         return true;
    });