Javascript 如何使用jQuery.ajax修改动态添加的html?
我在jQuery中有一个ajax调用,它在我的站点中返回并插入一些HTML。在同一个调用中,在成功回调中,我想用返回的html“做一些事情” 一些代码(简化): 问题在于,当代码执行达到第2点时,动态添加的html尚未加载。我知道async:false存在,但这不是我想要走的路线 我可以想象,这种情况很常见,你一般应该如何处理Javascript 如何使用jQuery.ajax修改动态添加的html?,javascript,jquery,Javascript,Jquery,我在jQuery中有一个ajax调用,它在我的站点中返回并插入一些HTML。在同一个调用中,在成功回调中,我想用返回的html“做一些事情” 一些代码(简化): 问题在于,当代码执行达到第2点时,动态添加的html尚未加载。我知道async:false存在,但这不是我想要走的路线 我可以想象,这种情况很常见,你一般应该如何处理 var insered = false; $.ajax({ url: "some_url.php", type: 'POST', dataTy
var insered = false;
$.ajax({
url: "some_url.php",
type: 'POST',
dataType: 'json',
data: some_data,
success: function(response){
myInsertHtmlFunction(response); // 1. This function inserts HTML dynamically
insered = true;
},
complete: function(){
if( insered == true ) {
$(newlyAddedSelector + ' input').each(function(){ // 2. Here I want to iterate over those dynamically added html elements
doStuffWithNewlyAddedHtml(this.value);
});
}
}
});
您可以在“完成最后的工作”方法中成功插入html。除非您的
myInsertHtmlFunction
函数执行了async
操作,否则您的代码应该可以工作,因为添加和删除html元素总是同步的
但是,如果您的应用程序逻辑也修改HTML,这取决于一些新添加元素的加载状态,例如,如果新添加的图像完成加载,那么您的代码将失败
这完全取决于myInsertHtmlFunction函数。您可以使用fct().done()等待ajax执行完毕,然后再转到第二个进程
function ajax1() {
return $.ajax({
url: "someUrl",
...
});
}
ajax1().done(function(){
// the code here will be executed when ajax requests resolve.
});
编辑的
问题在于,当代码执行达到第2点时,动态添加的html尚未加载。
应该加载。您能否在问题中包含myInsertHtmlFunction
的代码。如果您将第二块代码放在添加元素的函数中,不是会更容易、更可读吗?myInsertHtmlFunction()返回一些内容?为什么不将响应封装在jquery对象中,然后改用经典的jquery方法呢?我已经编辑了我的文章。我不太清楚。myInsertHtmlFunction也是一个异步ajax函数。好了,现在myInsertHtmlFunction
变成了myAsyncAjaxInsertHtmlFunction()
所以我想你应该从myAsyncAjaxInsertHtmlFunction()
返回promise接口,但你仍然没有发布这段相关的代码。。。为什么要执行两个ajax请求仍然是个谜。我已经编辑了我的文本。myInsertHtmlFunction是一个ajax调用,用于插入html元素。所以在运行我的代码之前,不可能等待这些元素完成加载?是的,有两种方法,1。参见第2节,A的答案,其中使用了承诺。只需将回调传递给MyInserthTML函数,并将HTML修改代码放在该回调函数中,将MyInserthTML函数作为参数捕获传入的回调函数,并仅在MyInserthTML函数内的ajax调用完成后执行。此解决方案看起来最有希望,但在这里也是同样的问题。当代码在When/done函数中时,ajax1()中的html仍然没有加载。@Web潜伏使用$.When是错误的语法。您应该只使用:ajax1().done(function(){//这里的代码将在ajax请求解析时执行。})代码>无需使用$。在此尝试使用$(document).ajaxComplete(函数(){//当ajax请求解析时,将执行此处的代码。})@答:沃尔夫:是的,我试过两种方法,一种是用美元,另一种是不用美元。没什么区别。HTML仍然没有加载,即使doStuffWithNewlyAddedHtml()函数在done()块中。@web潜伏,就像我说的,没有看到你在做什么(显然有些错误),你怎么能指望有人能帮助你更多???35分钟前,第一条评论要求你发布相关代码,但仍然没有。。。没关系,GL!
function ajax1() {
return $.ajax({
url: "someUrl",
...
});
}
ajax1().done(function(){
// the code here will be executed when ajax requests resolve.
});