还在学习,所以要温柔;) - 我网站上发生的事情如下:
结果发送电子邮件可能需要5秒或更长时间,我不希望用户必须等待它完成。我现在要做的是:
我试着张贴:
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插入成功时才会发送电子邮件。我认为这不重要,但以防万一。
任何人都知道如何解决这个问题?
答案 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)中指定的回调。在发布数据时通知您,并以您的快乐方式提供用户下次要做的事情。