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