javascript – js新手试图通过ajax混淆来理解dom(概念)
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – js新手试图通过ajax混淆来理解dom(概念),小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2570字,纯文字阅读大概需要4分钟。
内容图文
![javascript – js新手试图通过ajax混淆来理解dom(概念)](/upload/InfoBanner/zyjiaocheng/734/a122d1eecccb446ca373f3d8075dfcab.jpg)
我是一个Python/数据家伙,在一点点网络上徘徊,从根本上对JS和dom以及所有这些都毫无头绪.所以发生了一些非常奇怪的事情,即使我找到了解决方案,我也在努力理解其中的原因.
现场:一个常见的问题
有一百万个先前的SO问题沿着“我有一些工作jQuery / JS操纵一些HTML.然后而不是硬编码相关的HTML,我在其他地方以编程方式创建它并通过AJAX拖入它.突然之间一切都破了.“
总的来说,答案是这样的:“你不能那样做.把你的代码连接到亲子链上的某些东西,事件委托是一件神奇的事情,它会拯救你.”
所以这发生在我身上,我花了一个小时左右阅读之前的SO并了解事件授权,事实上,它救了我,我的代码也运行了.
但我不明白为什么它首先被打破了.所以我希望有人可以向我解释基础理论,这样我就会更深入地了解整个dom位.
一些破碎的代码
$(document).ready(function(){
$("#autopubs").load("pubslist.html");
// Obviously, the stuff in pubslist.html is what the next line was
// supposed to work on
$('.collapse').on('show.bs.collapse', function () {
$('.collapse.in').collapse('hide');
});
});
关于解决方案可能没什么惊喜.将autopubs包装在一个外部div中并将崩溃事物挂钩.完成,工作,深感不满.
但我仍然不明白为什么这是必要的.这是破碎的代码应该做的心理模型.
>好的,文档已完成加载!让我们执行我们的代码吧!
>第一行:让我们去获取这个文件并将其添加到DOM中.这是世界上的状态,现在我们将改变它,就像对待国家一样.
>好的,现在它是DOM的一部分.我们完成了那条线.我们去下一行吧.
>好的,现在我们想要将一堆事件监听器连接到类崩溃的所有内容.很酷,让我们来看看DOM的现状.嘿看,那里有崩溃类的所有这些东西.巴姆.陷入困境.
除了4从未发生过,因为第二行代码显然无法看到第一行添加的所有内容.
直觉上,有两个可能的原因:
>在第一行完成获取文件之前执行的第二行.如果这是真的,那么我已经学习了一些关于javascript(或jquery,或ajax,或者某些东西)的重要内容:行并不总是按顺序执行,或者在最不要总是在下一个开始之前完成.
>第一行根本没有改变任何状态. DOM不是状态.这是别的东西,某种东西……甚至可能是不变的?第一行完全用其他东西修补,第二行无法触及,因为它试图修改DOM.
老实说,这两种可能性对我来说都很奇怪.但显然我从根本上不理解这里的内容.有人能帮我吗?
解决方法:
你的第一个假设是正确的.当调用ajax时,它的异步意味着它将在完成时运行回调.在这种情况下,jquery已经调用了一个回调来将内容附加到div,但是在延迟大约100到200ms左右之后会发生这种情况.
但是其他代码可以立即运行,但由于异步调用尚未完成,因此找不到任何内容.
在jQuery中,如果你查看load的文档,你会看到(arg1,[arg2],[complete])的内容,其中complete将是一个闭包或回调函数.
如果将代码包装在该回调函数中而不是在其下面,那么在加载和添加内容之后将执行该代码.
编辑
负载load也是jquery中的便利/速记方法之一.有关更多文档,请查看Ajax
此外,DOM是非常可变的,执行请求的第一行确实对dom执行操作.由于它是异步的,它会告诉脚本在等待数据时继续运行,这就是它失败的原因.
希望这个对你有帮助!你有合适的照片:)
内容总结
以上是互联网集市为您收集整理的javascript – js新手试图通过ajax混淆来理解dom(概念)全部内容,希望文章能够帮你解决javascript – js新手试图通过ajax混淆来理解dom(概念)所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。