Javascript for statement Keeps显示未定义

时间:2015-01-29 19:06:07

标签: javascript

所以我制作这个cracker / bruteforce只是为了学习/测试nuthin非法,因为我是通过localhost和我自己的php登录来做的。

所以我一直在变得失败:未定义:未定义

当它假设为失败时:user:pass

任何帮助?

由于

<script>

function crack() {

    var cracked_area = document.getElementById("cracked_acc");
    var failed_area = document.getElementById("failed_acc");

    var num_users = 0;
    var num_cracked = 0;

    var html_next;

    var user_l = document.getElementById("users");
    var pass_l = document.getElementById("pass");

    if (user_l.value == "") {
        alert("The username field cant be empty!")
    } else if (pass_l.value == "") {
        alert("The password field cant be empty!")
    }

    var message = document.getElementById('message');

    var user_l_s = user_l.value.split("\n");
    var pass_l_s = pass_l.value.split("\n");


    for (var i = 0; i < user_l_s.length; i++) {
        num_users++;
        for (var j = 0; j < pass_l_s.length; j++) {
            $.ajax({
                url: 'php/postdata.php',
                type: 'GET',
                data: {'user': user_l_s[i], 'pass': pass_l_s[j]},
                dataType: 'text',

                success: function (response) {
                    html_next = response;

                    if (html_next.indexOf("Failed") > -1) {
                        failed_area.value += 'Failed:' + user_l_s[i] + ':' + pass_l_s[j] + '\n';
                    } else if (html_next.indexOf("Cracked") > -1) {
                        num_cracked++;
                        cracked_area.value += 'Cracked:' + user_l_s[i] + ':' + pass_l_s[j] + '\n';
                    }

                },
                beforeSend: function () {
                    message.innerHTML = "Loading results...";
                }
            });
        }
        message.innerHTML = "Total Accounts Cracked:" + num_cracked + "/" + num_users;
    }
}

2 个答案:

答案 0 :(得分:0)

success - 回调中,您引用变量i。 但想想当for循环运行时会发生什么。调用回调时循环已经完成,这就是为什么i等于pass_l_s.length,因此user_l_s[i]未定义。 如果您想在回调中使用变量i,则必须使用本地i

创建自己的小世界
success: (function(i){

    return function (response) {
        html_next = response;

        if (html_next.indexOf("Failed") > -1) {
            failed_area.value += 'Failed:' + user_l_s[i] + ':' + pass_l_s[j] + '\n';
        } else if (html_next.indexOf("Cracked") > -1) {
            num_cracked++;
            cracked_area.value += 'Cracked:' + user_l_s[i] + ':' + pass_l_s[j] + '\n';
        }
    }
})(i)

我们在这里定义了一个自调用函数,它需要参数i。当for循环现在循环遍历所有i时,每次从自调用函数返回一个新函数,该函数现在可以访问i,导致其本地定义为自调用函数的参数。 / p>

相关提示
Javascript1.7引入了一个新的关键字let,正是出于这个目的。但是在这些日子里它不能用于生产

答案 1 :(得分:0)

那是因为你在循环中调用了ajax()函数。它是在循环语句中进行的异步调用,当响应返回到客户端时,循环已经结束,因此user_l_s[i]将是未定义的。更改响应格式以返回哪个用户无法登录。