我有一个脚本可以间隔发送ajax请求,理想情况下它应该永远不会停止工作。
<script type="text/javascript">
var delay = 750;
window.setInterval(endlessJob, delay);
function endlessJob() {
//read from endless steam of data
var data = getData();
sendAjax(data);
}
function sendAjax(data) {
$.ajax({
url: "url",
jsonp: "jsonp",
dataType: "jsonp",
data: {
q: data
},
success: function (res) {
doSomething();
},
error: function (jqXHR, textStatus, errorThrown) {
console.log('ajax error! ' + errorThrown.message + "\n status: " + textStatus);
//should resume endless job, but the script fails with error(((((((((((
window.setInterval(endlessJob, delay);
}
});
}
</script>
然后就出现了问题:经过多次请求后,通常在1000到2000之间,请求因内部服务器错误500失败而且该功能永远不会恢复。已经尝试过try / catch,但没有成功(。基本上我需要 吞下错误并继续脚本 。有人可以帮我吗?
答案 0 :(得分:2)
您每隔3/4秒拨打一次服务器超过一千次。最终,您将在上次通话有足够时间完成之前拨打电话。如果您希望脚本长时间运行 ,我建议您将延迟延长至1500-2000(1.5-2秒,具体取决于您的服务器)或更改代码以要求回拨。这样,下一个调用将不会被初始化,直到前一个调用完成。这是您使用回调修改的代码。我没有时间测试它,但希望它会让你大致了解如何用回调来编写它。
<script>
function start() {
var data = getData();
sendAjax(data, function(callbackText) {
console.log(callbackText);
start(); // the previous ajax call is done. we may now start the next one
});
}
function sendAjax(data, callback) {
$.ajax({
url: "url",
jsonp: "jsonp",
dataType: "jsonp",
data: {
q: data
},
success: function(res) {
doSomething();
callback("This call is done. Now moving on to the next one.");
},
error: function(jqXHR, textStatus, errorThrown) {
console.log('ajax error! ' + errorThrown.message + "\n status: " + textStatus);
//should resume endless job, but the script fails with error(((((((((((
window.setInterval(endlessJob, delay);
}
});
}
start(); // start the entire process
</script>