jQuery检查远程页面是否已加载while循环

时间:2014-08-19 18:11:45

标签: jquery ajax

我们正致力于嵌入式可视化"在一个页面中。嵌入对象是从同一服务器上的另一个URL加载的(没有CORS问题),但是一旦用户加载了主页面,辅助资源就需要一段时间才能启动(1-5秒)。

<object id="main" width="100%" height="100%">
    <embed src="some-url" />
</object>

我们希望在此期间运行某种微调器,测试我们是否从嵌入资源中获取200 OK,然后将其附加到页面,因为没有好办法让我们允许刷新嵌入对象,直到它变得可用。这是我到目前为止所尝试的:

function test_ie_availability(){
    var loaded_page = false;
    var count = 0;
    while (!loaded_page){
        console.log("Test: " + count);
        count = count + 1;
        if(count > 10){
            break;
        }
        $.ajax({
            type: "GET",
            async: true,
            url: access_url,
        }).done(function(data, textStatus, jqXHR){
            if(textStatus === "success"){
                loaded_page = true;
            }else{
                console.log(textStatus);
            }
        });
        if(!loaded_page){
            setTimeout(function(){
                console.log("Sleeping for a second");
            }, 1000);
        }
    }
}

async:trueasync:false都会产生相同的结果:

Test: 0 z.js:34
Test: 1 z.js:34
Test: 2 z.js:34
Test: 3 z.js:34
Test: 4 z.js:34
Test: 5 z.js:34
Test: 6 z.js:34
Test: 7 z.js:34
Test: 8 z.js:34
Test: 9 z.js:34
Test: 10 z.js:34
undefined
(10) Sleeping for a second 

我已尝试在loaded_page / success回调中设置error变量,但两者均无效。

2 个答案:

答案 0 :(得分:1)

如何在区间内创建一个函数以继续检查它是否已加载...

var interval = setInterval( function () {

    if (document.all["main"].readyState == 4) {

        clearInterval(interval);

        alert("Initialization is ready.");
    }

}, 100);

答案 1 :(得分:1)

setTimeout(...)不会导致您的程序“睡眠”#34; - 它使得它在给定的间隔后某事。

所以你的while循环没有停顿运行11次,每次创建一个新的1s计时器,输出&#34;睡眠一秒钟&#34;到你的控制台。

您可以完全删除循环,只需添加代码以隐藏微调器代替此行:

loaded_page = true;