Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 暂停循环jQuery问题_Javascript_Jquery - Fatal编程技术网

Javascript 暂停循环jQuery问题

Javascript 暂停循环jQuery问题,javascript,jquery,Javascript,Jquery,我对javascript/jQuery有一个问题……我有一个web服务,它将处理来自客户端列表的信息。我想做的是让客户端逐段发送数据,允许web服务在不过载的情况下完成其工作。我还使用了一个jQueryUIProgressBar,它允许用户查看他们请求的进度 我的问题是,我使用的是for循环,当循环运行时,循环似乎运行到结束,因此,如果有10个数据要处理,那么所有10个同时运行 我想问的是,有没有一种方法可以使for循环暂停,直到从服务器收到成功消息 这就是我所尝试的: var nums = [

我对javascript/jQuery有一个问题……我有一个web服务,它将处理来自客户端列表的信息。我想做的是让客户端逐段发送数据,允许web服务在不过载的情况下完成其工作。我还使用了一个jQueryUIProgressBar,它允许用户查看他们请求的进度

我的问题是,我使用的是for循环,当循环运行时,循环似乎运行到结束,因此,如果有10个数据要处理,那么所有10个同时运行

我想问的是,有没有一种方法可以使for循环暂停,直到从服务器收到成功消息

这就是我所尝试的:

var nums = [1,2,3,4,5,6,7,8,9,10];

        for (var i in nums) {

        //I also tried 
        //for (num = 1; num <= 9; num++) {

            //start loop
            $("#progressbar").progressbar('option', 'value', num);
            var input = {
                "num": num,
                "total": 100
            }

            //  .progressbar('option', 'value', 37);              
            var jsonStr = JSON.stringify(input);
            //d = '{' + d + '}';
            $.ajax({
                type: "POST",
                url: "AjaxWcf.svc/TestModal",
                contentType: "application/json; charset=utf-8",
                data: jsonStr,
                dataType: "json",
                success: function(msg) {
                    $("#progressbar").progressbar({
                        value: num
                    });

                    //alert(msg.d);
                    //                    jQuery('#modalContentTest.loading').fadeOut(200);
                    //                    setTimeout('jQuery.modal.close()', 1000);

                    $("#message").value = msg;
                },
                error: AjaxFailed
            });
        }

        function AjaxFailed(result) {
            alert(result.status + ' ' + result.statusText);
        }
    });
var nums=[1,2,3,4,5,6,7,8,9,10];
用于(以nums为单位的var i){
//我也试过了

//对于(num=1;num,您需要从回调中递归,以便它调用序列中的下一个(如果存在)


您的问题是AJAX调用是异步的,这意味着行
$.AJAX(…)
将立即返回,而无需等待服务器接收请求并发送响应

虽然可以发送同步请求,但千万不要这样做,因为在请求完成之前,它会完全冻结浏览器。(Javascript始终在浏览器的UI线程上运行)

您需要在先前请求的
success
回调中发送每个请求

例如:

function sendPart(num) {
        $("#progressbar").progressbar('option', 'value', num);
        var input = {
            num: num,
            total: 100
        };

        var jsonStr = JSON.stringify(input);

        $.ajax({
            type: "POST",
            url: "AjaxWcf.svc/TestModal",
            contentType: "application/json; charset=utf-8",
            data: jsonStr,
            dataType: "json",
            success: function(msg) {
                $("#message").value = msg;

                if (num < 10)
                    sendPart(num + 1);
            },
            error: AjaxFailed
        });
    }
}

sendPart(1);
函数sendPart(num){
$(“#progressbar”).progressbar('option','value',num);
变量输入={
num:num,
总数:100
};
var jsonStr=JSON.stringify(输入);
$.ajax({
类型:“POST”,
url:“AjaxWcf.svc/TestModal”,
contentType:“应用程序/json;字符集=utf-8”,
资料来源:jsonStr,
数据类型:“json”,
成功:功能(msg){
$(“#消息”).value=msg;
如果(数值<10)
sendPart(num+1);
},
错误:ajax失败
});
}
}
第(1)部分;

请注意,如果前一个请求失败,这将不会发送下一个请求。

谢谢……我喜欢这两个示例,但如果一个请求失败,我不希望流程停止,因此这一个更适合我。我喜欢你的答案,因为它足够简单,我可以完全理解,我希望你理解我选择了Justin的答案,因为它是更适合我最终的需要。。。
function sendPart(num) {
        $("#progressbar").progressbar('option', 'value', num);
        var input = {
            num: num,
            total: 100
        };

        var jsonStr = JSON.stringify(input);

        $.ajax({
            type: "POST",
            url: "AjaxWcf.svc/TestModal",
            contentType: "application/json; charset=utf-8",
            data: jsonStr,
            dataType: "json",
            success: function(msg) {
                $("#message").value = msg;

                if (num < 10)
                    sendPart(num + 1);
            },
            error: AjaxFailed
        });
    }
}

sendPart(1);