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