jquery .load()不加载外部JS

时间:2016-04-24 23:16:05

标签: javascript jquery ajax

我使用<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> 而不是选择器将外部内容加载到div元素中。如果加载的内容嵌入了JS,则JS按预期工作。但是,如果内容包含带有jquery.load()的脚本标记,则不会加载js代码。

我在这个观察中是否正确?如果有的话,除了在加载的内容中嵌入JS之外还有一个很好的解决方案吗?

编辑:
一些澄清和观察:

加载我正在使用的内容

src=path-to-js-code

将加载代码更改为:

$("#DivId").load("path/to/content.php", CallbackFunction(response, status, xhr) {
    error checking and post processing code
});

似乎没有改变行为(更多关于下面的行为)

我没有尝试解析响应以检索脚本src然后使用$.get("path/to/content.php", CallbackFunction(response, status, xhr) { error checking $("#DivId").html(response); post processing });

现在更多关于行为......

使用Firefox,似乎外部JS已加载,但仅限于距离上次加载约2分钟。我没有看到Firebug中的尝试,除非在外部JS的最后一次加载后刷新大约2米。 (奇怪的)。当我进行JS代码更改并进行刷新时,它没有加载我的新代码,因此也没有加载原始问题。

所以我会根据这个明确的行为(2m缓存?)撤回我的问题。

感谢。

3 个答案:

答案 0 :(得分:0)

.load().html() jQuery方法都使用.innerHTML属性。这不会执行添加了<script>标记的脚本。使用常规的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
});

您需要确保在.append()

添加可信代码后再运行可信代码

答案 1 :(得分:0)

我想知道你可以使用正则表达式在$.load方法的响应文本中获取脚本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
            });
        });
    }
});

希望这可以提供帮助

答案 2 :(得分:0)

这是将外部JS加载到jQuery的简单方法

 $.ajax({
 type: "GET",
 url: "path/to/content.php",
 dataType: "script"
 success:CallbackFunction(response, status, xhr)     
 });