首页 > 解决方案 > jquery的ajax调用中未定义的变量

问题描述

我有一个相对简单的代码,我在一个循环中找到事件侦听器,但是在映射结果时循环变量不可用。

for (let index = 0; index < 2; ++index) {
    $("#id" + index).on("keyup", function () {

        $.ajax({
                type: "GET",
                url: "https://some-url.com",
                dataType: "json",
                success: function (data) {
                    $('#div' + index).append(
                        $.map(data, function (myData, index) {
                            return '<a href="#" onclick="selectId(index, myData.id);"> Click me </a>'
                        }).join());
                }
            }
        );
    });
}

结果是: Uncaught ReferenceError: index is not defined

编辑:例如,如果我只使用 myData.id ,那么一切都像魅力一样工作有什么想法我在这里想念的吗?

标签: javascriptjqueryecmascript-6

解决方案


您正在使用嵌入式 JS 生成HTML字符串。JS 在插入文档之前不会被评估。这是一个不同的范围,没有indexmyData变量。

而是生成一个 jQuery 对象。如果您不想在任何地方链接,请不要使用链接!

 function (myData, index) {
     const $button = $("<button />")
     $button.text("Click me");
     $button.on("click", () => selectId(index, myData.id));
     return $button;
 }

(并且不要join将数组转换为字符串,只需附加 jQuery 元素数组)。


推荐阅读