Javascript ajax请求后jQuery文档准备就绪

Javascript ajax请求后jQuery文档准备就绪,javascript,ajax,jquery,Javascript,Ajax,Jquery,我在更新ajax请求后未准备好的元素时遇到问题 如果我像这样在页面加载上运行我的myFunction()函数: $(function() { myFunction(); } 我一点问题也没有。但是如果我用类似的东西 $.ajax({ url: this.href, dataType: "script", complete: function(xhr, status) { myFunction(); } }); 它返回$

我在更新ajax请求后未准备好的元素时遇到问题

如果我像这样在页面加载上运行我的
myFunction()
函数:

$(function() {
 myFunction();
}
我一点问题也没有。但是如果我用类似的东西

$.ajax({
      url: this.href,
      dataType: "script",
      complete: function(xhr, status) {
        myFunction();
      }
    });
它返回
$(.myElement”).replacetwith(“htmlHere”)
。当触发完整事件时,元素根本没有准备好。如果我在那里设置一个延迟,它会再次正常工作

当DOM准备就绪时,除了“完成”之外,是否还有其他事件被触发

更新:

以下是实际代码:

$(function() {
  $("a.remote").live("click", function(e) {    
    $.ajax({
      url: this.href,
      dataType: "script",
      success: function(xhr, status) {
                myFunction();
            }
    });

    e.preventDefault();
    return false;
  });

  myFunction();
});

function myFunction() {
    // Modify the dom in here
}
失踪者);只是我的打字错误

我试着用“成功”而不是“完成”,这似乎没有任何区别

$(function() {
 myFunction();
}
应该是

$(document).ready(function() {
 myFunction();
});
或者,如果您希望ajax在加载时运行。做

$(document).ready(function() {
 $.ajax();
});
您可以使用
$(document).ready(function(){…})
打包加载DOM后要激发的任何内容。您的ajax请求可以放在
文档中。如果您希望等待dom加载完成,则可以将其放置在
文档中


如果要等待ajax加载其资源,则应使用
ajax.success
,而不是
complete
,缺少document ready包装函数的右括号

$(function() {
 myFunction();
});

注意
})结束。

只需在
$.ajax()调用中将
完成:
更改为
成功:

$.ajax({
      url: this.href,
      dataType: "script",
      success: function(xhr, status) {
        //make your DOM changes here
        myFunction();
      }
});
AJAX请求收到成功响应后,
success
函数将运行。因此,在该函数中进行DOM更改,然后运行
myFunction()

编辑
您似乎试图使用
myFunction()
对DOM进行更改。但是如果您不首先将AJAX响应中接收到的HTML插入DOM,那么
myFunction()
就没有什么可修改的了。如果这确实发生了,那么您有两个选择:

  • 将响应HTML插入DOM,然后调用
    myFunction()
    (所有这些都应该发生在
    success
    回调函数中)
  • 将AJAX响应作为参数传递给
    myFunction()
    ,以便
    myFunction()
    可以处理DOM插入,然后进行必要的修改
  • 我已经建立了一个基于你的代码,它似乎是工作

    这是当前代码:

     $(function() {
      $("a.remote").live("click", function(e) {    
        $.ajax({
          url: this.href,
          dataType: "script",
          success: function(xhr, status) {
                    myFunction();
                }
        });
    
        e.preventDefault();
        return false;
      });
    
    });
    
    function myFunction() {
        $("span").replaceWith("<p>test</p>");
    }
    
    $(函数(){
    $(“a.remote”).live(“单击”),函数(e){
    $.ajax({
    url:this.href,
    数据类型:“脚本”,
    成功:功能(xhr,状态){
    myFunction();
    }
    });
    e、 预防默认值();
    返回false;
    });
    });
    函数myFunction(){
    $(“span”)。替换为(“test

    ”; }

    它用一个段落替换span标记。请检查并与您的代码进行比较。如果是相同的,那么您的问题就出现在这个函数之外的某个地方(可能在myFunction中?)。

    每次ajax调用后都会触发一个事件。它被称为

    所以你可以

    function Init(){
      // stuff here
    }
    
    $(document).ready(function()
      Init();
    });
    $(document).ajaxComplete(function()
      Init();
    });
    

    您在$.ajax的成功事件上做了什么?在你的问题中,你是否应该提到一些函数?你想把所有的代码放在一个大的
    $(函数(){…})中处理程序。这样你就不会有这样的问题。。。顺便说一句,这样做也会给你一个名称空间,你无论如何都需要它。我用更新的代码更新了原始问题。
    $(function(){…})
    $(document)的快捷方式。ready
    。它只缺少一个
    。尽管如此,上面的代码似乎是他将ajax置于dom就绪事件之外。请查看对我的回复的编辑。如果有帮助,请告诉我。如果没有,请澄清将AJAX响应中的HTML插入DOM的确切位置。+1用于重现问题,如果没有答复,这是不讨好的。
    function Init(){
      // stuff here
    }
    
    $(document).ready(function()
      Init();
    });
    $(document).ajaxComplete(function()
      Init();
    });