执行通过ajax加载的内联js

时间:2012-02-22 12:02:47

标签: javascript jquery ajax

嗨,谢谢你停下来。

我已经解决了我的问题,但我自己,所以我只是想分享我的解决方案,也许有人有更优雅的方式来解决它。也许它的确很好。

所以我通过jquery.ajax()加载一些html,而dataType是html。 有时一个视频放在里面,而且我最优雅的方式是嵌入这个,是jwplayers js嵌入代码,看起来像这样:

<script>
    jwplayer("mediaplayer").setup({
        flashplayer: "/player.swf",
        image: "/image.jpg",
        autostart: true,
        'controlbar': 'none',
        file: "/video.m4v",
        width: 752,
        height: 416
    });
</script>

现在,如果我加载它,没有任何反应,js只是没有被执行。

所以我最终将没有脚本标签的js放入div。

<div id="vc">
    jwplayer("mediaplayer").setup({
        ...
    });
</div>

然后在我的ajaxComplete()调用中,我只是将这些东西移出div并将其放在两个脚本标记之间。

if ($("#vc").text() !== "") {
    var vjs = $("#vc").text();
    $("#vc").empty().html("<script>"+vjs+"</script>");
}

2 个答案:

答案 0 :(得分:2)

定义一个函数:

<script type="text/javascript">
    var embedPlayer = function() {
        jwplayer("mediaplayer").setup({
            flashplayer: "/player.swf",
            image: "/image.jpg",
            autostart: true,
            'controlbar': 'none',
            file: "/video.m4v",
            width: 752,
            height: 416
        });
    };
    embedPlayer();
</script>

然后在成功回调中你可以调用这个函数:

$.ajax({
    url: '/foo',
    success: function(result) {
        $('#container').html(result);
        embedPlayer();
    }
});

答案 1 :(得分:1)

虽然不推荐,但用户eval();

if ($("#vc").text() !== "") {
    eval($("#vc").text())
}