Javascript for语句始终显示未定义的
所以我制作这个cracker/bruteforce只是为了在这里学习/测试nuthin是非法的,因为我是通过localhost和我自己的php登录来做的 所以我总是失败:未定义:未定义 假设失败时:user:pass 有什么帮助吗 谢谢Javascript for语句始终显示未定义的,javascript,Javascript,所以我制作这个cracker/bruteforce只是为了在这里学习/测试nuthin是非法的,因为我是通过localhost和我自己的php登录来做的 所以我总是失败:未定义:未定义 假设失败时:user:pass 有什么帮助吗 谢谢 <script> function crack() { var cracked_area = document.getElementById("cracked_acc"); var failed_area = document.g
<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;
}
}
在成功回调中,您引用变量i。
但是想想当for循环运行时会发生什么。调用回调时循环已经完成,这就是为什么i等于pass_l_s.length,因此user_l_s[i]未定义。
当你想在回调中使用变量i时,你必须用一个局部变量i创建你自己的小世界
我们在这里定义了一个自调用函数,它需要参数i。当for循环now每次通过all i循环时,自调用函数返回一个新函数,该函数现在可以访问i,从而使其本地定义为自调用函数的参数
很高兴知道
Javascript1.7引入了一个新的关键字let,它正是为了达到这个目的。但是现在它在生产中不可用,这是因为在循环中调用ajax函数。它是在loop语句中进行的异步调用,当响应返回到客户机时,循环已经结束,因此用户将没有定义。更改响应格式以返回登录失败的用户。感谢您提供的信息和回答标记为答案的完美答案。
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)