Ajax调用挂起浏览器 - 我不关心回应
如果我不真正关心响应,我不想挂上浏览器,我该如何中止Ajax调用?Ajax调用挂起浏览器 - 我不关心回应
情况是我有一个ajax调用,可能会在某些情况下触发服务器发送超过1000封电子邮件。 99%的时间只有几封或几封电子邮件。 因此,通过1000个电子邮件ajax调用,浏览器在获取成功消息之前有时会等待5分钟,因此用户必须等待。
我已经尝试设置超时,但这仍然挂起。我想等待约20秒钟,然后放弃等待响应。
var request = jQuery.ajax({
type: "post",url: "admin-ajax.php",
data: {
action: 'send_email',
emailHTMLMessage: tinyMCE.activeEditor.getContent(),
_ajax_nonce: '<?php echo $nonce; ?>'
},
timeout: 20000, //Set your timeout value
success: function(html){ //so, if data is retrieved, store it in html
window.scrollTo(0,0);
sendResults(html);
},
error: function(jqXHR, textStatus, errorThrown) {
if(textStatus==="timeout") {
<... I'd redirect to another html page here....>
} else {
alert("Another error was returned"); //Handle other error type
}
}
}); //close jQuery.ajax
我试过request.abort(),但是这会立即杀死它,服务器永远不会收到send_email消息。
当服务器继续做这件事情时,我该如何静静地忽略20secs之后的响应?
在这篇文章中有当场打死办法keet http请求后运行脚本结束:
Can a PHP script start another PHP script and exit?
所以你可以让你的电子邮件脚本在服务器上运行。
如果你想知道你的状态,你可以让你的电子邮件脚本更新到一个mysql表中发送多少封电子邮件,并用ajax请求检查mysql表中的计数。
如果您发送1000封电子邮件,那么无论您做什么,该电话都会包含一些开销。您还必须等到所有信息都发送到服务器,然后才允许用户离开页面。
我的建议是更改服务器代码以便在服务器收到请求后立即响应。这样客户端就不会在服务器上等待完成发送整个批处理,而只是等待服务器接收到它们的请求。
服务器在这里完成繁重的工作,所有的Ajax调用确实是发送电子邮件的内容,并且我已经在群发电子邮件发送之前尝试了响应,例如,在PHP中: '//报告一切正常! echo'emailSuccess'; //发送...... $ this-> send_newsletter($ email_data,$ subscribers); } else { echo'Fail'; } die();' – sw19womble 2013-04-25 21:54:38
但不是立即发送电子邮件,您也可以将它们存储在数据库中并使用cron作业批量发送。另请注意,PHP的mail()函数并不是发送大量电子邮件的最佳工具。 – Arjan 2013-04-25 21:58:16
只需发布而不使用成功,超时或错误回调。
你可能想尝试创建为每个电子邮件新的GET请求:
for(i = 0; i<1000; i++){
var request = $.ajax({
type: "post",
url: "admin-ajax.php",
data: {'i':'nada'}
});
};
在这种情况下,我用一个for循环,但你也可以用电子邮件的数组:
var emails = new Array(1000);
$.each(emails, function(){
var request = $.ajax({
type: "post",
url : "admin-ajax.php",
data: {'i':'nada'}
});
});
我试过这个,但浏览器仍然挂起,直到所有的电子邮件都在服务器上发送。 – sw19womble 2013-04-25 21:53:15
Ajax调用是异步的,所以你的浏览器不会被阻塞,也不需要等待任何东西。你可以放空成功。即使你在浏览器中离开,你的服务器脚本已经启动,并可以使用'ignore_user_abort'和一个好的'set_time_limit'来完成它的工作:) – MatRt 2013-04-25 21:40:50