Javascript 执行异步HTTP请求-什么';这两者有什么区别?

Javascript 执行异步HTTP请求-什么';这两者有什么区别?,javascript,jquery,ajax,asynchronous,jquery-waypoints,Javascript,Jquery,Ajax,Asynchronous,Jquery Waypoints,这是用于在网页上加载Disqs注释的(默认/官方)JavaScript代码: (代码#1) (代码#3) 问题: 除了我现在使用jQuery进行这项工作这一明显的事实之外,代码#1和#2,以及#1和#3之间有什么区别吗?我可能是做错了什么事,而我完全错过了 为什么代码#2和#3在以$.noConflict()开头时不起作用?() 例如,这没有任何作用。(但在浏览器控制台中出现错误,“Uncaught TypeError:无法调用未定义的方法'noConflict'。) 两者之间没有区别,都是异步

这是用于在网页上加载Disqs注释的(默认/官方)JavaScript代码:

(代码#1)

(代码#3)

问题:

  • 除了我现在使用jQuery进行这项工作这一明显的事实之外,代码#1#2,以及#1#3之间有什么区别吗?我可能是做错了什么事,而我完全错过了

  • 为什么代码#2#3在以
    $.noConflict()开头时不起作用?()

  • 例如,这没有任何作用。(但在浏览器控制台中出现错误,“Uncaught TypeError:无法调用未定义的方法'noConflict'。)


    两者之间没有区别,都是异步加载脚本。通过在控制台的DOM资源管理器中查看呈现的脚本标记,您可以自己查看。如果需要同步加载,可以使用第一种方法并设置
    dsq.async=false。如果您在执行某些操作之前依赖它加载,请考虑将依赖的操作添加到脚本的OnLoad回调中,这样它将是非阻塞操作并保持页面加载速度:

    var disqus_shortname = 'paulund';
    
    (function() {
        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
        dsq.onload = function(){ 
           // dependent code goes here
        }
        dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
    

    不,没有区别。我会使用方法3<代码>$。如果按您的方式使用,则noConflict
    不应产生任何效果


    未捕获的TypeError:无法调用未定义的方法“noConflict”。这意味着您已经在其他地方使用了
    $。无冲突。

    没有,没有区别。我会使用方法3,甚至可能缩短到$.getScript。@KevinB如果可能,请给出答案。还有,我刚才碰巧漏掉了一个问题。请看一下更新后的问题。顺便说一句,您的#2不需要脚本元素创建代码周围的
    $({…})(
    包装器-在任何情况下都不应该有
    $
    ,因为加载页面后您不需要文档就绪处理程序,但是,当整个内容包含在另一个函数中时,您也不需要来自#1版本的匿名函数。(在#1中立即调用的匿名函数可能是为了将
    dsq
    变量保持在全局范围之外。)@nnnnnn因此,您建议我这样做:或者这样做:。对吗?如果你想使用#2,那么是的,我建议使用第一个pastebin样本。如果您想使用jQuery,那么我认为使用#3或您的第二个pastebin示例更有意义。在这里,如果可以,请看一看:。我不确定是什么导致了
    $.noConflict
    把事情搞砸了。是的,
    $.noConflict
    不应该影响任何东西<代码>jQuery(document).ready(函数($){…})允许您在
    ..
    中安全地使用
    $
    而不会出现问题。我刚刚在控制台中注意到此错误:Uncaught TypeError:无法调用undefined的方法'noConflict'。经过寻找,我知道解决办法是。那么这些文档错了吗?不,这意味着您已经在其他地方使用了$.noConflict。(1)您是对的。我认为WordPress(我使用的CMS)加载了默认的jQuery文件。但我注意到它的结尾是这样的:
    jQuery.noConflict()。这就解决了难题。你能把它加到你的答案里吗?这样我就可以给它打分了?(2) 我认为使用
    getScript
    不是一个好主意,因为它将缓存设置设置为false。因此,我必须执行
    $.ajaxSetup({cache:true})。相反,我计划坚持使用
    .ajax
    本身。如果我错了,请告诉我,如果没有错,请在您的答案中添加一条注释,以便填写所有详细信息以供将来参考。:)非常感谢你!
    jQuery(document).ready(function($){
        $('#comments').waypoint(function () {
    
            var disqus_shortname = 'paulund';
    
            $(function() {
                var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
                dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
                (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
            })();
    
        }, { offset: '100%', triggerOnce: true });
    });
    
    jQuery(document).ready(function($){
        $('#comments').waypoint(function () {
    
            var disqus_shortname = 'paulund';
    
            $.ajax({
                type: "GET",
                url: "http://" + disqus_shortname + ".disqus.com/embed.js",
                dataType: "script",
                cache: true
            });
    
        }, { offset: '100%', triggerOnce: true });
    });
    
    $.noConflict();
    jQuery(document).ready(function($){
        $('#comments').waypoint(function () {
    
            var disqus_shortname = 'paulund';
    
            $.ajax({
                type: "GET",
                url: "http://" + disqus_shortname + ".disqus.com/embed.js",
                dataType: "script",
                cache: true
            });
    
        }, { offset: '100%', triggerOnce: true });
    });
    
    var disqus_shortname = 'paulund';
    
    (function() {
        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
        dsq.onload = function(){ 
           // dependent code goes here
        }
        dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();