JavaScript ajax成功中断并继续不起作用

时间:2015-04-17 07:45:48

标签: javascript jquery ajax

嘿伙计们正在测试这个破解者我正在通过localhost工作,看看我是否能真正做到这一点,因为我很无聊,想要做一些事情,所以我想到了这一点,但我可以问为什么打破并继续arnt工作它的for循环不是吗?所以它应该有用。

编辑: 忘记提到代码甚至不起作用,当我添加休息并继续。

任何帮助都非常感谢。

function doTest() {

    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('status_1');

    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: 'posttest.php',
                type: 'GET',
                data: {'users': user_l_s[i], 'pass': pass_l_s[j]},
                dataType: 'text',
                async: false,
                success: (function (i, j) {

                    return function (response) {
                        html_next = response;

                        if (html_next.indexOf("Failed") > -1) {
                            continue;

                        } else if (html_next.indexOf("Cracked") > -1) {
                            break;

                        } else if (html_next.indexOf("DELETED") > -1) {
                            break;
                        }
                    }
                })(i, j),
                beforeSend: function () {
                    message.innerHTML = "Cracking Test...";
                }
            });
        }
    }
    message.innerHTML = "Done...";
}

3 个答案:

答案 0 :(得分:0)

这是因为您正在向服务器发送异步请求。这意味着您的服务器正在处理多个请求,并且没有必要在同一时间内响应每个请求。

您正在寻找的是可以一次处理数据的顺序代码。

你应该尝试async:false,然后尝试

答案 1 :(得分:0)

你必须使用成功回调,你只需要使用其他逻辑。而不是循环,在ajax成功完成时调用函数。此功能必须注册更改,并在必要时停止或继续工作。

这是我与其他SO用户一起使用的示例,但逻辑和想法是合适的。我们不再使用循环,而是等待每个成功回调继续工作。

var MyApp = {

    Scripts: {

        ToLoad: [
            '/path/to/script1.js',
            '/path/to/script2.js',
            '/path/to/script3.js'
        ],

        Loaded: 0

    },

    DoTheJob: function(){
        if( this.Scripts.ToLoad.length == this.Scripts.Loaded ) {
            // do some stuff
            return;
        }
        $.getScript(this.Scripts.ToLoad[this.Scripts.Loaded], function(){
            MyApp.Scripts.Loaded++;
            MyApp.DoTheJob();
        });
    }

};

$(function(){ 
    MyApp.DoTheJob();
});

以下是jsFiddle

答案 2 :(得分:0)

这应该这样做.. 您甚至可以使用async = true进行尝试 我认为它应该也适用它

function doTest() {

    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('status_1');

    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++;

        function makeReq(pass_l_s, index) {
            var index = index || 0;
            $.ajax({
                url: 'posttest.php',
                type: 'GET',
                data: {
                    'users': user_l_s[i],
                    'pass': pass_l_s[index]
                },
                dataType: 'text',
                async: false,
                success: (function(i, index) {

                    return function(response) {
                        html_next = response;

                        if (html_next.indexOf("Failed") > -1) {
                            index += 1
                            if (index < pass_l_s.length)
                                makeReq(pass_l_s, index)
                                // continue;

                        } else if (html_next.indexOf("Cracked") > -1) {
                            // break;

                        } else if (html_next.indexOf("DELETED") > -1) {
                            // break;
                        }
                    }
                })(i, index),
                beforeSend: function() {
                    message.innerHTML = "Cracking Test...";
                }
            });
        }
        makeReq(pass_l_s)
    }
    message.innerHTML = "Done...";
}