动态重载元素并在JQuery中读取它们的新属性
问题描述:
我有一个Ajax调用,它返回一段HTML代码,该代码应该替换页面上的旧HTML代码,并为它们提供新属性。在成功动态更改元素后,我想运行另一段JS代码,它读取并使用动态重新加载的元素的某些属性。但是,JS倾向于读取旧数据(就像它正在同步运行一样)。动态重载元素并在JQuery中读取它们的新属性
我找到的唯一解决方法是设置一个计时器,但计时器的延迟时间必须相对较高(300毫秒)以保证它始终正确完成。什么是正确的方法来做到这一点?
这是我现在所拥有的一个伪代码。它的工作原理,但300毫秒的延迟时间是可怕的。
$.post("ajax/test.html", function(newCode) {
$("#myDynamicDiv").html(newCode);
setTimeout(function(){
//Use the data that was just stored in #myDynamicDiv
},300);
});
答
对我来说,我使用.promise().done()
可能是它会与你
$("#myDynamicDiv").html(newCode).promise().done(function(){
// your code here
});
编辑工作:要的人谁就会来到这里后..While我的代码不与Mohasen工作他自己找到解决方案.. Please find his answer below
答
我接受了穆罕默德 - 尤瑟夫的回答,但既然这还没有包括完整的答案,下面是我最终做的完整版:
JQuery ajax调用在被调用时总是返回一个“Deferred”对象。你可以使用这个对象的“then()”方法在ajax调用完成后运行。这里是代码:
dfrd = $.post("ajax/test.html", function(newCode) {
$("#myDynamicDiv").html(newCode);
});
dfrd.then(function(){
//Anything that is here is guaranteed to happen after the Ajax call is done.
});
+0
我给你+1这个答案,并指出它在我的答案..有一个伟大的日子:-) –
我一直这样做,它完美的工作,也许它的ajax缓存搞乱你,我总是关掉它,有一个全球性的设置。显然要确保正在读取属性的JS在post函数内部和html插入之下。 – Seabizkit