Javascript load()不加载外部JS
我正在使用Javascript load()不加载外部JS,javascript,jquery,ajax,Javascript,Jquery,Ajax,我正在使用jquery.load()将外部内容加载到div元素中,而不使用选择器。如果加载的内容中嵌入了JS,则JS将按预期工作。但是,如果内容包含带有src=path to js code的脚本标记,则不会加载js代码 我的观察正确吗?如果正确,除了在加载的内容中嵌入JS之外,还有什么好的解决方案吗 编辑: 一些澄清和意见: 加载我正在使用的内容 $("#DivId").load("path/to/content.php", CallbackFunction(response, status,
jquery.load()
将外部内容加载到div元素中,而不使用选择器。如果加载的内容中嵌入了JS,则JS将按预期工作。但是,如果内容包含带有src=path to js code
的脚本标记,则不会加载js代码
我的观察正确吗?如果正确,除了在加载的内容中嵌入JS之外,还有什么好的解决方案吗
编辑:一些澄清和意见: 加载我正在使用的内容
$("#DivId").load("path/to/content.php", CallbackFunction(response, status, xhr) {
error checking and post processing code
});
将加载代码更改为:
$.get("path/to/content.php", CallbackFunction(response, status, xhr) {
error checking
$("#DivId").html(response);
post processing
});
似乎没有改变行为(有关以下行为的更多信息)
我没有尝试解析响应以检索脚本src,然后使用getScript()
现在更多关于行为
使用Firefox时,外部JS似乎已加载,但前提是距离上次加载大约2分钟。我在Firebug中没有看到任何尝试,除非刷新是在最后一次加载外部JS后2米左右。(奇怪)。当我修改JS代码并点击refresh时,它没有加载我的新代码,因此也没有加载原始问题
因此,鉴于这一澄清的行为,我将撤回我的问题(2m缓存?)
谢谢。jQuery方法的.load()
和.html()
都使用.innerHTML
属性。这不会执行添加了
标记的脚本。使用常规AJAX调用,例如.get()
,然后在回调中使用.append()
添加HTML字符串,脚本将在解析后运行,例如
$.get("path/to/content.php", function(response, status, xhr) {
// error checking
$("#DivId").append(response); // Any <script> tags in the response string will execute
// post processing
});
$.get(“path/to/content.php”,函数(响应、状态、xhr){
//错误检查
$(“#DivId”).append(response);//将执行响应字符串中的任何标记
//后处理
});
问题是,如果受信任的代码是由
.append()
添加的,您需要确保运行的是受信任的代码。我想知道您是否可以在$的响应文本中获取脚本src。使用正则表达式加载$方法,然后使用$.getScript()
方法加载脚本,可能类似这样:
$("#DivId").load("path/to/content.php", function(response, status, xhr) {
var regexp = new RegExp('script.*?src="(.*?)"'),
execresults = regexp.exec(response);
if(execresults.length > 1)
{
// the first result is the entire match including
// the 'script..src=', so abandon it
var matches = execresults.slice(1);
$.each(matches, function(){
$.getScript(this, function(){
// do something after load script
});
});
}
});
希望这能有所帮助这是将外部JS加载到jQuery的简单方法
$.ajax({
type: "GET",
url: "path/to/content.php",
dataType: "script"
success:CallbackFunction(response, status, xhr)
});
由于您使用的是没有选择器的load()
,因此您加载内容的唯一原因似乎是执行
。如果是这样,为什么不使用?通过“无选择器”,您指的是?@user193130-在我当前的架构中不太容易。要加载的内容(html和JS)在服务器上动态生成。php代码之前是基于各种数据从DB表中获取某些JS代码,并将JS嵌入到返回的内容中。最近,我尝试将脚本src=tag放在数据库中,将JS代码放在服务器上的文件中(更容易编辑)。但正如帖子所说,外部JS没有被加载。@Jonathan Lonowski-是的,正确。我已经读过“页面片段选择器”将剥离所有脚本标记,因此即使是嵌入式JS也不会加载。我想指出我没有那样做。@ds00424似乎我误解了你。我想你的意思是类似于jQuery().load('/path/to/content')
(我甚至不确定它是否真的有效),并且加载的HTML内容除了其中包含的
之外没有被使用。文档在“加载页面片段”中提到了.innerHtml节,其中仅为请求的节解析返回。我没有那样做。如编辑中所述,.load似乎会加载一个外部脚本,但仅当它是2m或更旧时。(FF)(不知道为什么)。很长一段时间以来,我一直使用.load()来加载嵌入式脚本——这对我来说很有用。基于arch/design,加载的内容是HTML、CSS和脚本的混合体。是的,我正在考虑类似的解决方案。然而,我发现(至少在FF中)外部JS似乎只有在超过2分钟时才被加载(至少从测试和观看Firebug Net面板来看是这样)。我能应付。在测试过程中,当我点击refresh并且没有看到已更改的JS代码被加载时,我的帖子被提示。但在等待2m并点击刷新后,它就被加载了。想想看,可能是缓存问题吗?在脚本url之后添加一个随机数作为查询字符串怎么样?比如$.getScript(this+'?rand='+Math.random(),function(){})代码>