Javascript 运行jQuery';s$(document).ready(函数(){…});在Ajax响应中
我有一个应用程序,它从包含模板页面的多个页面片段构建页面内容。加载文档时,其中一个或多个片段需要运行JavaScript,在包含片段的模板页面中放置特定于片段的代码是没有意义的。虽然这种方法对我来说效果很好,但在尝试根据用户与页面的交互通过Ajax更新片段时,我遇到了一个问题 我正在使用jQuery和Javascript 运行jQuery';s$(document).ready(函数(){…});在Ajax响应中,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我有一个应用程序,它从包含模板页面的多个页面片段构建页面内容。加载文档时,其中一个或多个片段需要运行JavaScript,在包含片段的模板页面中放置特定于片段的代码是没有意义的。虽然这种方法对我来说效果很好,但在尝试根据用户与页面的交互通过Ajax更新片段时,我遇到了一个问题 我正在使用jQuery和$(document).ready(function(){…})非常自由,在模板页面(对于全局范围的代码)和片段(对于特定于片段的代码)中。问题是,当在html元素的jQuery丰富版上使用jQue
$(document).ready(function(){…})代码>非常自由,在模板页面(对于全局范围的代码)和片段(对于特定于片段的代码)中。问题是,当在html元素的jQuery丰富版上使用jQuery的.html(来自Ajax响应的html代码)
更新片段时,Ajax响应本身包含$(document).ready(function(){…})代码>代码,HTML内容得到了很好的更新,但是JS没有执行
一些人建议在Ajax响应中的JS片段上使用eval()
,而其他人则禁止使用。我希望有人能把我推向正确的方向
$.ajax({
type: 'POST',
url: $(formObj).attr('action'),
data: $(formObj).serialize(),
})
.done(function(data, textStatus, jqXHR) {
$response = $(data.replace(/<body(.*?)>/,'<body$1><div id="ajaxResBody">').replace('</body>','</div></body>'));
$('#fragmentContent').html($response.find('#fragmentContent').html());
});
并生成以下日志输出:
scripts found in Ajax response
scripts stripped before content inserted into fragment!
我严重怀疑文件准备就绪与您的问题有任何关系。你可能也过度使用了它。如果文档已经准备好,回调将立即执行,这意味着只要jquery存在,回调就应该工作。@KevinB all instances document ready在最初加载整个页面时工作正常。只有在随后对页面进行更新(通过Ajax)时,当单独检索片段HTML并将其插入页面时,嵌入的文档就绪代码(在片段中)才不会执行。您是否将console.logs放在其中以查看它不会执行?你确定不是因为执行太早而找不到元素吗?@KevinB是的,我在片段的JS中添加了console.log调用。这些日志语句只在初始页面加载时出现,但在通过Ajax检索内容时不会出现。这意味着您的javascript将以某种方式从内容中剥离。您可以展示一个加载包含脚本的附加html并将其添加到DOM的示例吗?也可能有助于查看附加的html+脚本。
<div id="fragmentContent">
<p>...</p>
<div>...</div>
</div>
if (data.indexOf('accordion(') >= 0) {
console.log('scripts found in Ajax response');
if ($response.find('#fragmentContent').html().indexOf('accordion(') >= 0) {
console.log('scripts inserted into fragment');
}
else {
console.log('scripts stripped before content inserted into fragment!');
}
}
else {
console.log('scripts did not even make it in the Ajax response!');
}
scripts found in Ajax response
scripts stripped before content inserted into fragment!