需要在使用JQuery发送.post请求后立即重定向页面

时间:2011-10-28 00:18:26

标签: javascript jquery ajax

还在学习,所以要温柔;) - 我网站上发生的事情如下:

  1. 发送AJAX POST请求以使用新事件更新sql数据库 与会者
  2. 发送一些电子邮件通知
  3. 等待服务器为发送的电子邮件返回“ok”
  4. 重新加载页面以向新与会者展示
  5. 结果发送电子邮件可能需要5秒或更长时间,我不希望用户必须等待它完成。我现在要做的是:

    1. 发送sql的AJAX POST请求
    2. 发送服务器请求发送电子邮件通知
    3. 在服务器响应#2之前重新加载页面。
    4. 我试着张贴:

      window.location.replace("");
      

      $.post(
      '/_x_/email/tag',
          {
          event_id: event_id,
          tagged_id: tag_id,
          type: 'tag_event_ongoing'
          }
      );
      

      但服务器仍会等待响应。 我也试过了:

      document.open();
      $.get("",function(data) {
         document.write(data);
      })
      document.close();
      

      在发布请求之前 - 这会重新加载页面,但由于某些原因,除非我手动重新加载,否则javascript都不起作用。

      编辑:我也尝试过使用正确的$ .ajax()调用:

      var email = $.ajax({
      url: '/_x_/email/tag',
      type: 'POST',
      data: {
          event_id: event_id,
          tagged_id: tag_id,
          type: 'tag_event_ongoing'
      },
      dataType: "json",
      success: function (res) {
          window.location.replace("");
      }
      });
      

      附加说明: 我的电子邮件代码是作为sql插件的回调编写的 - 因此只有在SQL插入成功时才会发送电子邮件。我认为这不重要,但以防万一。

      任何人都知道如何解决这个问题?

3 个答案:

答案 0 :(得分:1)

您应该配置服务器平台以在后台发送电子邮件。所有服务器应该做的是确认收到来自ajax帖子的信息,在后台生成邮件程序进程,并让用户以他们的快乐方式。我无法想到的唯一原因是,您重定向到的页面取决于发送的电子邮件。这将需要某种异常通知或在发生错误时“重试”该过程的方式。

这是解决此问题的正确方法,但我猜你可能用Javascript攻击它。

答案 1 :(得分:0)

我会考虑使用完整版$.ajax call而不是post。这将为您提供更多控制权,因为您可以连接几个ajax事件。

您还可以从服务器返回新活动参加者的列表,然后您可以跳过完全重新加载页面。如果您重新加载整个页面,最终可能无法确定是否或何时完成AJAX调用。

您是否针对第1项和第2项进行了两次单独的AJAX调用,或者您是否在一次调用服务器时执行了这两项操作?如果你在一个函数中完成所有操作,那么你可以将服务器端调用分成两个函数,并在客户端上进行两个离散的ajax调用。这样,当数字1返回时,您可以更新屏幕而无需等待2号。

对于您提供的少量代码,这是我能做的最好的事情。

答案 2 :(得分:0)

使用jQuery.post()... [,success(data,textStatus,jqXHR)中指定的回调。在发布数据时通知您,并以您的快乐方式提供用户下次要做的事情。