Neo*_*ang 6 ajax jquery http web
我使用jquery的ajax方法从服务器动态加载一些html片段,并将片段插入div.在代码片段中有一些<script>外部脚本标签.
我在制作ajax请求时在Chrome工具栏中查看了网络活动,并发现脚本标记的GET请求附加了类似的内容?_=1234567890.我还注意到GET请求的发起者是jquery.我知道jquery为AJAX请求执行此操作以避免使用缓存版本,但我希望缓存脚本.
让我感到惊讶的是,<script>标签是由jquery用ajax获取的.将<script>标记插入DOM时,浏览器是否应负责加载和执行标记?为什么jQuery在这里采取行动?
如果我跳过jquery并使用普通的js将<script>标签附加到DOM,浏览器将加载并解析它,对吧?为什么浏览器不执行此操作并让jquery接管?
==============代码=============
用于加载html代码段的代码:
var url = "/"+modulename+"/settings/"+this.selectedProduct.id;
$.get(url, null, function(snippet){
$("div#content").empty().html(snippet);
}
Run Code Online (Sandbox Code Playgroud)
html片段:
<script type='text/javascript' src="http://www.staticcdn.org/somelib.js"></script>
<script>
<!--some html rendering code that depends on somelib-->
</script>
Run Code Online (Sandbox Code Playgroud)
小智 2
由于您使用的是 Chrome,这里有一个提示。如果将鼠标悬停在网络调用源上,将显示一个弹出窗口,其中包含调用时的堆栈堆。在这样的调用中执行此操作会暴露 jquery.js:6717 的 _evalUrl 在页面上第一次调用脚本时被调用(setGlobalEval 禁止在同一页面上第二次调用该脚本)。
_evalUrl: function( url ) {
return jQuery.ajax({
url: url,
type: "GET",
dataType: "script",
async: false,
global: false,
"throws": true
});
}
Run Code Online (Sandbox Code Playgroud)
由于该代码不使用缓存选项,因此您有几个选项:
使用不推荐的https://api.jquery.com/jQuery.ajaxSetup/为所有调用设置不缓存,因此您必须覆盖所有非缓存调用的缓存。我有没有提到所有的电话?
编辑来源。
不要有压力,让事情保持原样。
纯粹是猜测,但您可以自己获取内容并将其插入到 DOM 中,然后自行处理渲染结果。
看来这是作为在调用时插入 DOM 的内容的结构化/清理的一部分来完成的。