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

Dynamically reload elements and read their new attributes in JQuery

我有一个 Ajax 调用 returns 一段 html 代码,应该替换页面上的旧 html 代码,为它们提供新属性。在我成功地动态更改我的元素后,我想 运行 另一段 JS 代码读取和使用动态重新加载的元素的一些属性。但是,JS更喜欢读取旧数据(好像是同步运行ning)。

我发现的唯一解决方法是设置一个计时器,但计时器的延迟时间必须相对较高(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
});

编辑:对于稍后会来这里的人..虽然我的代码不适用于Mohasen he find a solution himself ..

我接受了 Mohamed-Yousef 的回答,但由于那不包括完整的答案,这里是我最终所做的完整版本:

A JQuery ajax 在调用时始终调用 returns 一个 "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.
});