javascript - jQuery 在 ajax 调用中选择附加元素不起作用

标签 javascript jquery ajax

在代码中,.moneychoose是moneychoose.jsp中的div。 $(".moneychoose") 无法在 ajax 调用中选择。

$("input[name='money']").on("click", function() {
    if ($("#money").find(".moneychoose")) {
        $(".moneychoose").remove();
    }

    //append external html
    $.get("moneychoose.jsp", function (data) {
        $("#money").append(data);
    });

    $.ajax({
        type: "POST",
        url: "src/province_price.json",
        data: '',
        dataType: "json",
        async: "false",
        success: function(response) {
            console.log($(".moneychoose"));
        },
        error: function(qXhr, status, error) {
            alert(status + ':' + error + ':' + qXhr.responseText);
        }
    });
});

但是如果我在“附加外部html”之后添加console.log($(".moneychoose")), ajax调用中的$(".moneychoose")可以被选择。为什么?但是“append external html”后面的$(".moneychoose")仍然无法被选中。

$("input[name='money']").on("click", function() {
    if ($("#money").find(".moneychoose")) {
        $(".moneychoose").remove();
    }

    //append external html
    $.get("moneychoose.jsp", function (data) {
        $("#money").append(data);
    });

    console.log($(".moneychoose"));

    $.ajax({
        type: "POST",
        url: "src/province_price.json",
        data: '',
        dataType: "json",
        async: "false",
        success: function(response) {
            console.log($(".moneychoose"));
        },
        error: function(qXhr, status, error) {
            alert(status + ':' + error + ':' + qXhr.responseText);
            }
    });
});

最佳答案

您的困惑是因为 console.log 不是同步的。 您的错误是因为两个 AJAX 请求之间存在竞争条件。

//append external html
$.get("moneychoose.jsp", function (data) {
  $("#money").append(data);
});

还有

 $.ajax({
        type: "POST",
        url: "src/province_price.json",
        data: '',
        dataType: "json",
        async: "false",
        success: function(response) {
            console.log($(".moneychoose"));
        },
        error: function(qXhr, status, error) {
            alert(status + ':' + error + ':' + qXhr.responseText);
        }
    });

为了确保 .moneychoose$.ajax 的成功回调中可用,您需要使用一个在两个请求都成功后解析的 Promise ,否则您需要等待执行其中一个请求,直到另一个请求完成。

关于javascript - jQuery 在 ajax 调用中选择附加元素不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29300273/

相关文章:

javascript - HTML 和 JS 中不同的字符串表示

javascript - 将 div 的高度更改为浏览器窗口高度,只要浏览器高度大于 x

php - 为 jquery + php 创建永久链接

javascript - 无法修复购物车中的总计功能

javascript - MongoDB 从数组中返回特定字段

javascript - 如何从堆栈中省略一列?

javascript - 在 ajax 调用后,jquery 隐藏不适用于同一个 div 类?

c# - MVC3 Ajax.BeginForm OnSuccess 无法在 Firefox 中运行

javascript - Highchart-alternateGridColor,绘图带问题

javascript - 如何将 SnapEngage 与 Adwords 集成?