2013-04-22 64 views
1

我在页面中使用jQuery插件版本1.8.1。我创建了一个函数,根据下面的代码创建动态脚本,并将其放置在HTML页面的BODY中。动态脚本与document.ready()侦听器不执行与AJAX调用

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

上述动态脚本获取一些额外的HTML和使用AJAX和JQuery的追加到身体标记,但阿贾克斯完成后它不会执行。如果我添加一个如下所示的简单警报('something'),那么它会执行。

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

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

+0

Ajax是异步的。 $(document).ready()不会等到ajax完成。警报会阻止所有JavaScript执行,但不阻止http请求,因此ajax会在文档就绪事件处理程序触发前完成。解决方法是不用这种方式编码。将需要ajax的所有代码放在ajax的成功处理程序中。 (另外,不要使用警报来调试...) – 2013-04-22 17:23:51

回答

1

这是因为文档准备事件发生已。因为你的页面已经完全加载。你必须以另一种方式解决这个问题。

1

为了当AJAX完成和文件已准备就绪,你可以使用这样的认识:如果AJAX请求失败(无论何种原因)

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 
}); 

,那么$.when().done回调没有按”执行。它要求两个延迟对象都能成功完成。如果您不关心AJAX是否成功,请将.done更改为.then