【问题标题】:Dynamically reload elements and read their new attributes in JQuery在 JQuery 中动态重新加载元素并读取它们的新属性
【发布时间】:2017-05-30 23:44:52
【问题描述】:

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

我发现的唯一解决方法是设置一个计时器,但计时器的延迟时间必须相对较高(300 毫秒)才能保证它始终正确完成。这样做的正确方法是什么?

这是我现在拥有的伪代码。它可以工作,但 300 毫秒的延迟时间很糟糕。

$.post( "ajax/test.html", function( newCode ) {
    $("#myDynamicDiv").html(newCode);
    setTimeout(function(){
        //Use the data that was just stored in #myDynamicDiv
    },300);
});

【问题讨论】:

  • 我一直这样做,而且效果很好,也许是 ajax 缓存搞砸了你,我总是把它关掉,它有一个全局设置。显然要确保正在读取属性的 JS 位于 post 函数内部和 html 插入下方。

标签: javascript jquery ajax settimeout dynamic-loading


【解决方案1】:

对我来说,我使用 .promise().done() 可能对你有用

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

编辑:对于稍后会来这里的人..虽然我的代码不适用于Mohasen,但他自己找到了解决方案..Please find his answer below

【讨论】:

  • 这并不完全有效,至少在我的情况下,但我正在查看“完成”和“承诺”,看看那里是否有适合我的东西。我会尽快告诉你!
  • 好的,我使用“then”和 Deferred 对象让它工作。我接受了你的回答,因为它让我走上了正轨。谢谢! :)
  • @Mohsen 您可以使用带有您姓名的正确代码将其添加到我的答案中 [Mohsen 更新和正确答案] 可能会对未来的某人有所帮助..祝您有美好的一天:- )
  • @Mohsen 请也发布您的解决方案,我认为除了您标记为已接受的答案之外,这对其他方面也有帮助
  • 好的,作为单独的答案提交。
【解决方案2】:

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

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

【讨论】:

  • 我为这个答案给了你+1,并在我的回答中指出了它。祝你有美好的一天:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-15
  • 1970-01-01
  • 2019-09-07
  • 2015-12-02
  • 1970-01-01
  • 2011-01-07
相关资源
最近更新 更多