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

Javascript 在JQuery中动态地重新加载元素并读取它们的新属性,javascript,jquery,ajax,settimeout,dynamic-loading,Javascript,Jquery,Ajax,Settimeout,Dynamic Loading,我有一个Ajax调用,它返回一段html代码,用来替换页面上的旧html代码,并赋予它们新的属性。在成功地动态更改元素之后,我希望运行另一段JS代码,该代码读取并使用动态重新加载的元素的一些属性。然而,JS更喜欢读取旧数据(就好像它是同步运行的一样) 我发现唯一的解决方法是设置一个计时器,但计时器的延迟时间必须相对较高(300毫秒),以确保它始终正确完成。正确的方法是什么 这是我现在所拥有的一个伪代码。它工作,但300毫秒的延迟时间是可怕的 $.post( "ajax/test.html", f

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

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

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

编辑:给稍后来这里的人..当我的代码无法使用时,他自己会找到解决方案

我接受了穆罕默德·优素福的答案,但因为那不包括完整的答案,下面是我最终所做的事情的完整版本:

jQueryAjax调用在调用时总是返回一个“延迟”对象。在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.
});

至少在我的情况下,这并不完全有效,但我正在查看“完成”和“承诺”,看看那里是否有适合我的东西。我一开始工作就告诉你!好的,我用“then”和延迟对象来实现它。我接受了你的回答,因为它使我走上了正确的道路。谢谢!:)@Mohsen您可以将其添加到我的答案中,使用正确的代码和您的姓名[由Mohsen更新和正确的答案]可能会对未来的某人有所帮助。。祝你有一个美好的一天:-)@Mohsen也请发布你的解决方案,我认为这对其他人会有帮助,而不仅仅是你标记为acceptedOK的答案,作为一个单独的答案提交。我一直都在做这件事,它工作得非常完美,也许是ajax缓存把你弄糊涂了,我总是关闭它,它有一个全局设置。显然,要确保正在读取属性的JS位于post函数内部和html插入的下方。我给了你+1的答案,并在我的答案中指出了它。。祝你今天愉快:-)