【问题标题】:execute ajax loaded javascript code执行ajax加载的javascript代码
【发布时间】:2012-05-01 19:06:12
【问题描述】:

我正在加载包含一些 javascript 代码的页面,$.getScript() 方法在这里不起作用,因为一些 javascript 代码是通过 php 动态构建的。

<div id="fetch-me">
...
<script...>
var posts = <?php .... ?> 
...
</script>
</div>

你可能对这类问题很熟悉,一旦我加载这个 div:

$("#load-me").load("... #fetch-me"); 

Javascript 不可用。我显然需要执行。而且我尝试了几件事,但没有成功。举个例子:

$("#load-me").load("... #fetch-me", function(){
 eval($("#load-me").find("script").text());
}); 

任何帮助表示赞赏,谢谢。

【问题讨论】:

    标签: jquery ajax dom


    【解决方案1】:

    load 将返回它在回调中加载的数据。尝试获取脚本并将它们附加到&lt;script&gt; 标记。

    $("#load-me").load("... #fetch-me", function(data){
        $('<script>').html($(data).filter('script').html()).appendTo('head');
    });
    

    如果加载的页面中有多个脚本标签,则可能无法正常工作。如果是这种情况,试试这个:

    $("#load-me").load("... #fetch-me", function(data){
        $(data).filter('script').each(function(){
            $('<script>').html($(this).html()).appendTo('head');
        });
    });
    

    附:如果这不起作用,请尝试将.filter 更改为.find。

    【讨论】:

    • 该页面只有一个脚本标签,但不幸的是,您的第一个既没有 filter 也没有 find 的解决方案会将其附加到 head。
    • 对不起,我的错误。有多个脚本标签,所以我不得不使用第二种解决方案,它就像一种享受。非常感谢您的帮助!
    【解决方案2】:

    您是否在 javascript 中为字符串变量添加了引号?

    var posts = "<?php .... ?>" 
    

    【讨论】:

    • 如果您使用var posts = &lt;?php echo json_encode($x); ?&gt;,则不需要。
    • 如果值为数字,则也不需要:var posts = &lt;?php echo $a/$b; ?&gt;。
    • 我写的,只有 string 值。
    • 这不是问题,因为此鳕鱼在页面本身上完美运行。问题是在加载 AJAX 后执行它。谢谢
    【解决方案3】:

    你可以这样做:

    $.get("page.php", function(data){
        //data is the information that page.php returns
        //Now instead of use this --> var posts = <?php .... ?>
        //do this:
        var post = data;
    });
    

    【讨论】:

    • 我认为&lt;script&gt; 标签中的代码比var posts = &lt;?php .... ?&gt; 更多。
    猜你喜欢
    • 1970-01-01
    • 2011-04-05
    • 2011-08-29
    • 2013-01-16
    • 2019-03-12
    • 1970-01-01
    • 1970-01-01
    • 2010-10-15
    • 2015-12-09
    相关资源
    最近更新 更多