我想用GET请求启动一个ajax循环来检查来自我的控制器的状态。一旦循环启动,我想通过更改window.location来启动文件下载。
但是我从这段代码中得不到console.logs,为什么?
function getExcelIKT() {
setInterval(function () {
$.ajax({
type: 'GET',
url: getDownloadCSVForIKTStatusUrl,
dataType: 'json',
async: 'true',
success: function (DownloadCSVForIKTStatus) {
console.log(DownloadCSVForIKTStatus);
}
});
}, 3000);
window.location = downloadExcelUrlIKT;
}
答案 0 :(得分:1)
function getExcelIKT() {
setInterval(function () {
$.ajax({
type: 'GET',
url: getDownloadCSVForIKTStatusUrl,
dataType: 'json',
async: 'true',
success: function (DownloadCSVForIKTStatus) {
console.log(DownloadCSVForIKTStatus);
if (false) { //change to some conditions
window.location = downloadExcelUrlIKT;
}
}
});
}, 3000);
}
只需将if (false) {
更改为if (DownloadCSVForIKTStatus.success) {
为什么你看不到console.logs?因为setInterval
和$.ajax
函数是异步的。例如
setTimeout(function () {
console.log(1);
setTimeout(function () {
console.log(2);
},0);
console.log(3);
},0);
console.log(4);
结果将为4 1 3 2
。 (我使用setTimeout
而不是setInterval
,即使超时为0秒也是异步的)