我有一个Ajax调用,它返回一段html代码,该代码应该替换页面上的旧html代码,为它们提供新属性。在我成功动态更改元素之后,我想运行另一段JS代码,该代码读取并使用动态重新加载元素的一些属性。但是,JS更喜欢读取旧数据(就像它同步运行一样)。
我发现的唯一解决方法是设置定时器,但定时器的延迟时间必须相对较高(300 ms)才能保证它始终正确完成。这样做的正确方法是什么?
这是我现在拥有的伪代码。它有效,但300ms的延迟时间很糟糕。
$.post( "ajax/test.html", function( newCode ) {
$("#myDynamicDiv").html(newCode);
setTimeout(function(){
//Use the data that was just stored in #myDynamicDiv
},300);
});
答案 0 :(得分:2)
对我而言,我使用.promise().done()
可能会与您合作
$("#myDynamicDiv").html(newCode).promise().done(function(){
// your code here
});
修改:对于稍后来到这里的人。虽然我的代码不与Mohasen合作,但他自己找到了解决方案。{{3} }
答案 1 :(得分:1)
我接受了穆罕默德 - 优素福的答案,但由于那不包括完整的答案,这里是我最终做的完整版本:
JQuery ajax调用在调用时始终返回“Deferred”对象。在ajax调用完成后,您可以使用此对象的“then()”方法来运行。这是代码:
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.
});