2017-05-30 31 views
3

我有一个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); 
}); 
+0

我一直这样做,它完美的工作,也许它的ajax缓存搞乱你,我总是关掉它,有一个全球性的设置。显然要确保正在读取属性的JS在post函数内部和html插入之下。 – Seabizkit

回答

2

对我来说,我使用.promise().done()可能是它会与你

$("#myDynamicDiv").html(newCode).promise().done(function(){ 
    // your code here 
}); 

编辑工作:要的人谁就会来到这里后..While我的代码不与Mohasen工作他自己找到解决方案.. Please find his answer below

+0

这不完全正常,至少在我的情况下,但我看着“完成”和“承诺”,看看我有没有什么东西在那里。一旦我开始工作,我会尽快告诉你! – Mohsen

+0

好的我使用“then”和Deferred对象来工作。我接受了你的回答,因为它让我走上了正轨。谢谢! :) – Mohsen

+0

@Mohsen你可以将它添加到我的回答中,用正确的代码和你的名字[由Mohsen更新和正确的答案]可能会有助于未来的人..有一个伟大的日子:-) –

1

我接受了穆罕默德 - 尤瑟夫的回答,但既然这还没有包括完整的答案,下面是我最终做的完整版:

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这个答案,并指出它在我的答案..有一个伟大的日子:-) –

相关问题