gpt4 book ai didi

javascript - 通过 JavaScript 更新素数不起作用

转载 作者:行者123 更新时间:2023-11-28 15:51:23 25 4
gpt4 key购买 nike

我尝试使用 JavaScript 即时更新素数,而不使用服务器端编码。这是我的代码。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>AJAX with PHP: Quickstart</title>
<script type="text/javascript">
var n = 1;
search: while (true) {
n += 1;
for (var i = 2; i <= Math.sqrt(n); i += 1)
if (n % i == 0)
continue search;
// found a prime!
document.getElementById('result').innerHTML=n;
}
</script>
</head>
<body>
<p> I want to update prime number here</p>

<div id="result" >

</div>
</body>
</html>

但是,div“结果”此处未更新。我们不能仅使用 javascript 来完成此操作吗?就像下面的例子 http://www.whatwg.org/demos/workers/primes/page.html 一样

更新代码

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>AJAX with PHP: Quickstart</title>
<script type="text/javascript">
var n = 1;
function testNextPrime() {
var isPrime = true;
n = n + 1;
// console.log('testing', n);
for (var i = 2; i <= Math.sqrt(n); i += 1) {
if (n % i == 0) isPrime = false;
}

if (isPrime) {
document.getElementById('result').innerHTML=n;
}

// Schedule the next test (this gives browser a chance to update display and process any other events)
setTimeout(testNextPrime, 2000);
}
// Start testing for primes
testNextPrime();
</script>
</head>
<body>
<p> I want to update prime number here</p>

<div id="result" >

</div>
</body>
</html>

最佳答案

问题是你有一个无限循环。您从未退出 while (true) ... 循环?在此之前,浏览器永远没有机会更新 DOM 并刷新显示。

这是一个JSFiddle showing one way to use setTimeout()放弃对主事件循环的控制。

更新:您可以使用 Web Worker,但这需要将 Worker 代码分解为可以从单独的 URL 加载的脚本。 Doing this in a JSFiddle是可能的,但需要一些扭曲,使解决方案比其他必要的解决方案稍微复杂一些。因此,在阅读该代码时请注意这一点。

关于javascript - 通过 JavaScript 更新素数不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20473152/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com