Javascript 更改 window.location 和 运行 异步 ajax 获取
Javascript change window.location and run async ajax get
我想用 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;
}
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 秒也是异步的)
我想用 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;
}
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 秒也是异步的)