当前位置: 首页 > 面试题库 >

如何停止jquery将唯一ID附加到通过ajax调用的脚本中?

林哲茂
2023-03-14
问题内容

我正在使用jquery的ajax函数来抓取页面片段并显示在页面的一部分中-该片段包括html和对外部js文件的引用。

程序流程如下所示:

主页调用->通过脚本标签调用->各种大型js文件的片段页面。

我在最初的ajax调用中打开了cache选项,以便缓存碎片页面(没有唯一的ID附加到url),但是在加载片段时,jquery似乎重写了脚本url以包含unix时间戳以便浏览器每次都下载脚本的新副本。我正在调用的脚本大约压缩了250kb,这确实在损害用户体验,因为无论何时调用浏览器,它们都会锁定。这是jQuery的理想行为吗?有没有办法禁用URL重写?

非常感谢您的帮助


问题答案:

看起来jQuerys的evalScript函数让您感到困惑…

jQuery的543行:

function evalScript( i, elem ) {
    if ( elem.src )
        jQuery.ajax({
            url: elem.src,
            async: false,
            dataType: "script"
        });

   else
        jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );

   if ( elem.parentNode )
       elem.parentNode.removeChild( elem );
}

这是发生的情况的细分:主页的JS调用:

$.ajax({
    url:"frag.htm",
    type:"GET",
    success:callBackFunction
})

和GET frag.htm,其中包含以下内容:

<html><head><script src="test.js"></script></head><body>Content</body></html>

然后您的回调函数将被调用,看起来像这样:

function callBackFunction(data){
    $("#ajaxContent").html(data); // <- this is the beginning of your problems...
}

当调用jQuery的html(data)函数时,它会通过删除任何脚本标签来“清理”
HTML,然后在每个脚本标签上调用evalScript。如您所见,evalScript没有指定“ cache:true”,因此当它通过$
.ajax时,缓存为空。当cache为null且dataType为“ script”时,jQuery设置cache = false。

因此,为避免此问题,请尝试以下操作:

function callBackFunction(data){
    var tempAJAX = $.ajax; // save the original $.ajax
        $.ajax=function(s){ // wrap the old $.ajax so set cache to true...
            s.cache=true;
            tempAJAX(s); // call old $.ajax
        }
        $("#ajaxContent").html(data); // insert the HTML and download the <script>s
        $.ajax = tempAJAX; // reset $.ajax to the original.
    }
}

在将新的HTML文件从“ frag.htm”插入主页之前,我们将拦截对$ .ajax的所有调用,将对象修改为包括cache =
true,然后在加载脚本后插入HTML。

如果您有任何疑问,请告诉我。



 类似资料:
  • 问题内容: 我经常需要通过ajax加载其他javascript文件,因此一开始我使用jQuery提供的标准功能来加载脚本: 但这并没有解决,因为$ .getScript是异步的($ .ajax的jQuery API默认将’async’设置为true;在$ .getScript的API注释中讨论了主题:http:/ /api.jquery.com/jQuery.getScript/ )。因此,我编写

  • 我为浏览器游戏制作了脚本。在这个游戏中,我站着不动,我的脚本在某些地方点击bksononechno,但我需要的是,如果我点击字母,这个脚本将自杀,而不是试图关闭浏览器及其在浏览器中的选项卡和类似的东西。 抱歉出错了。

  • 问题内容: 我有一个div标签,该标签通过ajax调用填充了脚本,但是脚本未执行。 有没有办法使脚本执行? 问题答案: 如果您使用jQuery的方法,它将解析出脚本标签并对其进行评估: 如果没有jQuery,则可以使用(1)正则表达式或(2)解析DOM树并查找脚本标签来自己编写。(#2是jQuery的执行方式)

  • 问题内容: 是否可以通过shell脚本将用户添加到sudoers文件中?我一直在环顾四周,仍然找不到任何东西。 问题答案: 您可以简单地(当然具有提升的特权)直接访问文件: (请注意用户名和第一个之间的制表符) 或者,对于脚本: 然后保存到,然后从终端窗口运行。 要添加多个用户,请将脚本更改为此。 然后,像这样运行脚本(假设您将其另存为): 即,以空格分隔。 要从文件中读取名称: 也应以空格分隔。

  • 问题内容: 最近,我通过更复杂的项目更改了编码样式,以“按需”加载页面(及其嵌入式脚本)。但是,很难像加载时那样调试这些脚本: 要么 这些脚本可以完美运行,但是,如果要调试,如何在这些动态加载的页面和脚本中设置断点? 问题答案: 更新 现在,接受的表单带有(标签)而不是(符号) 语法进行了更改,以避免与IE条件编译语句和其他一些问题发生冲突(感谢Oleksandr Pshenychnyy和Varu

  • 我很喜欢这个从http://www.jqueryscript.net/time-clock/modern-circular-jquery-countdown-timer-plugin-final-countdown.html下载的倒计时脚本,想把它用到我的wordpress网站上,我读了一些关于如何在wordpress中放入任何脚本的教程,但是我不能完全理解,因为我是新手,你能帮我一步一步地做吗