Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript load()不加载外部JS_Javascript_Jquery_Ajax - Fatal编程技术网

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(){})