javascript - 循环时数组的索引变为未定义

标签 javascript jquery

<分区>

我正在创建一个小型域可用性检查器。为此,我会将所需的域解析为一个表单,并使用 jQuery AJAX 将其提交到一个 PHP 文件。 但是,当我循环遍历不同的 TLD 时,它突然变得不确定,我无法使用“TLD”在循环中进行进一步处理。据我所知,它与首先发生的循环和之后发出的请求有关,所以我不得不以某种方式卡住数组的索引。但我不知道该怎么做。

这是我的代码:

$("input[name=submit]").click(function(){
        var getDomain = $("#domainsearch").val();
        var stripDomain = getDomain.split(".");
        var domain = stripDomain[0];
        var tlds = ["dk", "se", "com", "net"];
        for (var i = 0; i < tlds.length; i++ ) {
            var dataString = "domain=" + domain + "." + tlds[i];
            console.log(dataString);
            $.ajax({
                type: "POST",
                url: "search.php",
                data: dataString,
                success: function(data) {
                    console.log(domain + "." + tlds[i] + " is " + data);
                }
            });
        };
        return false;
    });

打印的 console.log 看起来像这样: enter image description here

最佳答案

这是一个经典 JavaScript 问题。在 success 函数(闭包)中,使用了 i。一旦 AJAX 调用完成,该回调将在未来运行。至此,循环结束,i 已递增到 4

tlds[4] 不存在,这就是您得到 undefined 的原因。回调都使用相同 i 值。

要修复它,您需要创建一个新函数来为每个回调捕获 i 的值。

$("input[name=submit]").click(function(){
    var getDomain = $("#domainsearch").val();
    var stripDomain = getDomain.split(".");
    var domain = stripDomain[0];
    var tlds = ["dk", "se", "com", "net"];

    var createCallback = function(i){
        return function(data) {
            console.log(domain + "." + tlds[i] + " is " + data);
        };
    }

    for (var i = 0; i < tlds.length; i++ ) {
        var dataString = "domain=" + domain + "." + tlds[i];
        console.log(dataString);
        $.ajax({
            type: "POST",
            url: "search.php",
            data: dataString,
            success: createCallback(i)
        });
    };
    return false;
});

关于javascript - 循环时数组的索引变为未定义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25024613/

相关文章:

javascript - Firefox 中的动态创建内容 iframe 问题

javascript - JQDateRangeSlider更改开始/结束值

javascript - 鼠标悬停时保持工具提示(标题属性)更新

asp.net-mvc-4 - Jquery Ajax 调用 - 传递多个参数避免名称依赖

javascript - 如何让二维数组动态拆分成行

javascript - EaselJS键盘输入问题

javascript - 使用 js-xlsx 解析 Excel 中的数据

javascript - 如何根据屏幕宽度调用函数?

jquery - "Infinite scroll"-类似。先把火烧到底部

javascript - 如何从 JSON 中获取值?