2010-08-16 52 views
1

这是我的情况:jquery和ajax如何结合在一起?

我有一个页面,一旦点击它的一个div的ajax请求获取更多的内容到页面。

我在说的内容越多,就是使用jQuery的图片库内容。 我的问题是,一旦我从ajax请求得到响应,我操纵DOM。 因此jquery ready()函数不再适用于我(或是否?) 可以跳过我为 $.fn指定一个函数的问题,称为InitGallery

使用eval我可以调用它,一旦我的ajax响应到达,一切都很好,除了一个小问题 - 同步!

一旦我eval我的$.fn.InitGallery代码,操纵DOM不一定是完全加载,因此我的InitGallery失败。

一旦我添加一个睡眠或警告我的代码,并确保在DOM再次准备好之后运行InitGallery函数,这很好,并且工作正常。

我想我的问题是我如何重新分配一个现成的功能到DOM?我怎么才能确保函数调用后的ajax响应只有在DOM上的ajax响应更改准备好后才会调用? 谢谢

+0

格式不当,对问题的标题很糟糕,但有趣的是没有那么多。 +1 – 2010-08-16 19:58:56

回答

0

在你的ajax请求的成功处理程序中调用你的init函数。

$.ajax({ 
    url: 'ajax/test.html', 
    success: function(data) { 
    makeYourChanges(); 
    callYourInit(); 

    } 
}); 
1

我需要更多的信息,但我的初步答案是:

无论您加载内容AJAX应触发“准备”事件或新的内容加载完成类似的东西。这样你可以将InitGallery绑定到该元素的“准备好”,并在dom准备就绪后完成所有初始化。

什么是通过AJAX加载您的内容?

+0

好吧,只是我写的一个愚蠢的功能。 我想我会改变它与jquery ajax框架一起工作。根据另一种答案,我得到 : $阿贾克斯({ 网址: 'AJAX/test.html的', 成功:功能(数据){ makeYourChanges(); callYourInit(); } }); 应该工作。 你对这个问题有什么想法吗? – Oded 2010-08-16 20:05:42

+0

'callYourInit()'可能不像看起来那么简单。脚本有哪些功能用于加载的ajax内容,它在内容中还是已经包含在内? – 2010-08-16 20:28:03

3

根据你想要做的事情,你有几个选项。

如果您使用live函数,您可以将事件连接一次,并且在更改DOM后它们将继续工作。

另一种选择是将初始化代码的函数:

$(function() { 
    doCoolStuff(); 
}); 

然后挂接到ajaxCompleteajaxSuccess事件:

$.ajaxComplete(function() { 
    doCoolStuff(); 
}); 
+0

只是想指出你在你的第一个片段中有一个语法错误 – 2010-08-16 20:05:54

+0

感谢鲍勃 - 修复它。 – 2010-08-16 20:06:48

0

无需对文档使用ready()事件再次为此。就绪事件只会在DOM最初加载时触发一次。

对此的方法是将函数分配给您传递给ajax调用的对象的success属性;一旦呼叫的响应成功完成,这是您希望执行的功能。

$.ajax({ 
    url : 'http://some.url', 
    success : function(response) { 
     // do the insert into the DOM. An example 
     // assuming your response is text/html 
     $(document.body).append(response); 

     // now call InitGallery 
     $('#selector').InitGallery(); 
    } 
}); 
相关问题