时间:2011-10-26 05:29:59

标签: javascript jquery ajax internet-explorer script-tag

我有一个页面,它使用jQuery的$ .post()方法获取一些html,而html内部是一个标记。

我的代码看起来像这样:

$.post( 'myUrl',
    { someData : 'someData', moreData : 'moreData'},
    function(response){
        $('body').append(response);
});

是否有原因导致脚本标记在IE< = 8中无法解析?它在每个其他浏览器中解析得很好。我一直在网上搜索几个小时,似乎无法在这个问题上找到任何东西,所以我假设我忘记了某些事情或者做错了什么?

编辑:

刚刚在jQuery网站(http://api.jquery.com/jQuery.ajax/)上找到了关于ajax请求的html dataType的信息:

“以纯文本形式返回HTML;插入DOM时会评估包含的脚本标记。”

关于相关的SO问题(Can't append <script> element):@Hendra给出的答案表明这应该是有效的。这仍然让我爱不释手,为什么这在IE7 / 8中不起作用。

2 个答案:

答案 0 :(得分:1)

使用DOM方法插入<script>标记会导致标记被执行。只使用innerHTML(或使用它的某个框架)不会导致脚本被执行。这可能是您的问题的原因。我建议分离HTML和JS,然后在JS部分运行eval

答案 1 :(得分:0)

我发现了问题。

我的网站使用html5,因此依赖于innershiv(http://jdbartlett.com/innershiv/)将元素插入到非html5浏览器的dom中(对我而言,这将是ie7 / 8)

我忘记了我们有一个自动脚本在所有jQuery插入方法(.html(),. append()等上调用innershiv。)

我失败的原因是innershiv正在绕过jQuery的脚本评估。

修复是从调用innershiv的脚本中进行脚本评估。 JD Bartlett在此提供了更详细的解释:https://github.com/jdbartlett/innershiv/issues/4