Javascript 如何使用jQuery.ajax修改动态添加的html?

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

我在jQuery中有一个ajax调用,它在我的站点中返回并插入一些HTML。在同一个调用中,在成功回调中,我想用返回的html“做一些事情”

一些代码(简化):

问题在于,当代码执行达到第2点时,动态添加的html尚未加载。我知道async:false存在,但这不是我想要走的路线

我可以想象,这种情况很常见,你一般应该如何处理

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