循环ajax调用,直到按钮被按下
Looping ajax calls until button is pressed
document.getElementById("uploadUpdate").addEventListener("click", function() {
intervalVarUpload = setInterval(function () {
console.log("Updating table..");
Object.keys(arrExplores).forEach(function (key) {
if(arrExplores[key][2] != "Not"){
//remoteArrUpdate makes a ajax call
remoteArrUpdate(arrExplores[key][2], key);
}
});
}, 2000);
console.log("Interval started!");
});
document.getElementById("uploadStop").addEventListener("click", function() {
clearInterval(intervalVarUpload);
});
function remoteArrUpdate(id, key) {
$.ajax({
url: 'https://offcloud.com/api/remote/status',
data: {'requestId' : id},
type: 'POST',
crossDomain: true,
xhrFields: {
withCredentials: true
},
success: function(data) {
arrExplores[key] = [arrExplores[key][0],key,data.status.requestId,data.status.status, data.status.fileSize];
explorArrToTable();
},
error: function() {
console.log('Failed!');
}
});
}
此时,uploadUpdate按钮被点击,间隔开始遍历数组,对每个对象进行ajax操作并更新该对象。但是,我不想使用间隔,因为有时下一个间隔将在前一个间隔完成之前开始,有时会有很长的等待时间。我希望下一个间隔在前一个间隔成功或不成功地完成所有ajax调用后立即开始,再次从数组的开头开始并开始进行相同的ajax调用,直到按下uploadStop按钮。我该如何改变两个按钮功能来做到这一点?
只是试图模仿你的ajax调用使用setTimeout。您可以在ajax成功/失败中使用它。我认为,你需要一些代码重构来实现这一点。希望这篇文章能帮助你找到正确的方向。
var intervalVarUpload;
document.getElementById("uploadUpdate").addEventListener("click", function() {
uploadUpdate();
});
function uploadUpdate() {
//Start the Interval
intervalVarUpload = setInterval(doSomething, 2000);
console.log("Interval started!");
}
document.getElementById("uploadStop").addEventListener("click", function() {
console.log("Interval Stopped");
//Clear the Interval
clearInterval(intervalVarUpload);
});
function doSomething() {
//Clear the Interval so as to hold on till the current method call is complete.
clearInterval(intervalVarUpload);
console.log("Updating table..");
var arrExplores = {
customArray: ["Yes", "Not", "Hello"]
};
Object.keys(arrExplores).forEach(function(key) {
if (arrExplores[key][2] != "Not") {
//remoteArrUpdate makes a json call
remoteArrUpdate(arrExplores[key][2], key);
}
});
}
function remoteArrUpdate(id, key) {
setTimeout(function() {
//Consider as a ajax complete
uploadUpdate();
}, 2000)
}
<button id="uploadUpdate">Upload Update</button>
<button id="uploadStop">Upload Stop</button>
相关文章:
- 通过ajax到php文件获取单选按钮值
- 如何防止多个ajax查询在“;prev“;按钮被点击多次
- 当使用ajax并将html数据保存为对象时,收听浏览器返回按钮.好的或坏的
- Javascript/Ajax:通过点击按钮检查有效的电子邮件和电话号码
- 从Django中同一页面上的多个按钮启动AJAX请求
- 使用Ajax的后退按钮历史记录,URL中没有散列
- 如何在Razor MVC 5.2.3 Ajax中使用多个提交按钮
- 类似按钮增量计数器不工作.PHP,AJAX,MySQL,javascript
- 如何使用jQuery/Ajax响应特定的提交按钮
- 在按钮'上运行PHP代码;s onclick事件,或者使用Ajax
- jQuery在单击按钮时中止所有AJAX请求(query)
- 如何通过ajax php将图像上传到服务器本地目录,其中html表单haven't任何传统的提交按钮
- 十月CMS-单选按钮Ajax连续点击两次导致内容消失
- 为不同的 HTML 按钮 (AJAX) 编写不同的 PHP 代码
- 点击类似按钮ajax不工作
- 是否在下拉选择*时自动提交表单而不单击“提交”按钮?AJAX/PHP
- 就像RubyonRails中的按钮Ajax一样——如何更改图像和标志性文本
- 单页应用程序和后退按钮[AJAX]
- 可拖动和可点击的按钮AJAX必应地图
- Nodejs 处理按钮/ajax 请求