我有以下文件将通过AJAX加载:
<div id="container">
<div>I need this in AJAX and the following scripts too</div>
<script type="text/javascript">
alert('I am executed');
</script>
<script type="text/javascript" src="some_included_script.js"></script>
</div>
<div>I do not need this in AJAX</div>
如果我按以下方式加载它:
$.ajax({
url: url,
type: "GET",
cache: false,
dataType: "html",
success: function(data) {
$('#my_big_container').html(data);
}
});
然后执行所有脚本,并从服务器请求some_included_script.js并执行。没问题。
但如果我只需要“容器”中的部分并尝试以下代码:
$.ajax({
url: url,
type: "GET",
cache: false,
dataType: "html",
success: function(data) {
$('#my_big_container').html(
$(data).filter('#container').html()
);
}
});
然后没有任何脚本被执行,也没有some_included_script.js的请求(尽管“容器”的简单HTML内容正确插入'my_big_container'。
为什么在我使用整个“数据”时脚本会被执行,而在我只过滤其中的一部分时却不会执行?
如何只加载接收数据的一部分并自动执行内部脚本?
答案 0 :(得分:1)
我认为这有效:
而不是:
success: function(data) {
$('#my_big_container').html(
$(data).filter('#container').html()
);
}
试试这个:
success: function(data) {
$('#my_big_container').html(
$("<div>").html(data).find('#container')
);
}