页面因未知原因冻结

时间:2019-09-24 15:17:14

标签: javascript json

我最近一直在尝试MyJSON。我试图创建一个从数据库中获取的函数(这样我就不必每次都需要输入长文本),而当我每次运行代码时页面突然冻结。根据我的调试,它甚至在冻结之前都不运行代码。这是我的IDE的错误吗?如果有帮助,我将repl.it与HTML / CSS / JS结合使用。

function submit() {

}
console.log("test test test");
function getJSON() {
    console.log("beginning");
    var out;
    console.log("start");
    $.get("https://api.myjson.com/bins/1fsm75", function(data,  textStatus, jqXHR) {
        var json = JSON.stringify(data);
        console.log(json);
        out = json;
        console.log(out);
    });
    while(out == undefined) {}
    return out;
}
console.log("testarooni");
console.log(getJSON());

2 个答案:

答案 0 :(得分:1)

为了解决您面临的问题,我建议您检查浏览器中的“网络”标签(在Google Chrome浏览器中,按F12键以显示它),以便了解GET通话的性能。

无论如何,我也建议使用异步调用执行相同的调用。 首选异步GET调用,因为它是非阻塞的。

这是一个异步GET调用的示例,该调用用于从您提供的端点中检索数据:

<!DOCTYPE html>
<html>
    <head>
        <script>

            async function getDataAsync() {
                let response = await fetch('https://api.myjson.com/bins/1fsm75');
                let data = await response.json()
                return data;
            }

            getDataAsync()
                .then(data => console.log(data)); 

        </script>        
    </head>
    <body>
    </body>
</html>

答案 1 :(得分:0)

因为这条线而冻结 while(out == undefined) {}

您似乎正在尝试“等待$ .get方法完成,调用它的回调并在继续之前分配出值”的行为。

但是,JavaScript是单线程的。这意味着,尽管它在while(out == undefined) {}中循环,但仍在不断循环,并且从未有机会执行$ .get的响应。

您需要做的是处理$ .get返回的Promise / Observable(我忘记了)。