动态重新加载元素并在JQuery中读取它们的新属性

时间:2017-05-30 23:44:52

标签: javascript jquery ajax settimeout dynamic-loading

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

2 个答案:

答案 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.
});