Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 运行jQuery';s$(document).ready(函数(){…});在Ajax响应中_Javascript_Jquery_Html_Ajax - Fatal编程技术网

Javascript 运行jQuery';s$(document).ready(函数(){…});在Ajax响应中

Javascript 运行jQuery';s$(document).ready(函数(){…});在Ajax响应中,javascript,jquery,html,ajax,Javascript,Jquery,Html,Ajax,我有一个应用程序,它从包含模板页面的多个页面片段构建页面内容。加载文档时,其中一个或多个片段需要运行JavaScript,在包含片段的模板页面中放置特定于片段的代码是没有意义的。虽然这种方法对我来说效果很好,但在尝试根据用户与页面的交互通过Ajax更新片段时,我遇到了一个问题 我正在使用jQuery和$(document).ready(function(){…})非常自由,在模板页面(对于全局范围的代码)和片段(对于特定于片段的代码)中。问题是,当在html元素的jQuery丰富版上使用jQue

我有一个应用程序,它从包含模板页面的多个页面片段构建页面内容。加载文档时,其中一个或多个片段需要运行JavaScript,在包含片段的模板页面中放置特定于片段的代码是没有意义的。虽然这种方法对我来说效果很好,但在尝试根据用户与页面的交互通过Ajax更新片段时,我遇到了一个问题

我正在使用jQuery和
$(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!