Javascript更改window.location并运行async ajax get

时间:2015-01-14 11:21:44

标签: javascript jquery ajax asynchronous

我想用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;

    }

1 个答案:

答案 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秒也是异步的)