我最近一直在尝试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());
答案 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(我忘记了)。