有没有办法执行同步 AJAX 查询而不冻结浏览器?在我看来,在大多数情况下,同步请求更容易使用,但它们阻止代码其他部分执行的事实才是真正的杀手。有没有一种方法可以实现同步 AJAX 而不会带来负面影响? (是的,我意识到术语“同步 AJAX”是一个矛盾的说法。)
我将提供一个例子来说明允许这种行为所带来的不良影响。
假设你有这个程序:
<script>
var file = "foo.json";
function nullIt() {
file = null;
}
function loadFile() {
if (file != null) {
synchronousLoad(file);//imagine the load takes 5 seconds
alert("i just loaded: " + file);
}
}
window.onload = loadFile;
</script>
<button onclick="nullIt()">click me</button>
坏事就在这里——
- 而
synchronousLoad()
阻塞 5 秒,用户单击按钮,事件处理程序快速运行完成。
- Now the
file
变量为空。
-
synchronousLoad()
完成并返回,让执行继续到下一行代码
- but
file
现在为空,并且向用户输出的消息已损坏。
这里真正的问题是你不能再以同样的方式推理你的代码。仅仅因为一些事实
第 5 行为 true,并不意味着下一行仍然为 true。这使得编写无错误的程序变得非常困难。
有些编程语言支持多线程,你必须处理这些问题,尽管你有工具来帮助处理这些问题。
但是,程序员仍然需要付出很多额外的努力。
相对而言,使用回调来做异步操作就是ez-mode。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)