带有document.ready()侦听器的动态脚本没有执行ajax调用

Dynamic Script with document.ready() listener not executing with ajax call

本文关键字:脚本 执行 调用 ajax 动态 ready document 侦听器 带有      更新时间:2023-09-26

我的页面使用了1.8.1版本的jQuery插件。我创建了一个函数,按照下面的代码创建动态脚本,并将其放置在HTML页面的BODY中。

<script> $(document).ready(function(){ // .... Some javascript }); </script>

上面的动态脚本使用AJAX获得一些额外的HTML和JQuery,并将其附加到Body标记,但在AJAX完成后它不会执行。如果我像下面这样添加一个简单的警告("某事"),那么它就会执行。

<script> alert('something'); $(document).ready(function(){ // .... Some javascript }); </script>

请告诉我是什么问题,我想执行动态脚本与document.ready()没有警报()框..

这是因为文档准备事件已经发生。因为您的页面已经完全加载。

为了知道什么时候AJAX完成了,什么时候Document准备好了,您可以使用如下代码:

var docReady = new $.Deferred();
var ajaxDone = $.ajax({
    url: "whatever",
    type: "GET",
    blah blah blah
});
$(document).ready(function () {
    docReady.resolve();
});
$.when(ajaxDone, docReady).done(function () {
    // Document is ready and AJAX request is successful
});

如果AJAX请求失败(无论出于何种原因),则$.when().done回调不会执行。它要求两个延迟对象都成功完成。如果您不关心AJAX是否成功,可以将.done更改为.then