Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/439.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 等待AJAX完成,然后再继续循环?_Javascript_Jquery_Ajax - Fatal编程技术网

Javascript 等待AJAX完成,然后再继续循环?

Javascript 等待AJAX完成,然后再继续循环?,javascript,jquery,ajax,Javascript,Jquery,Ajax,为什么每次我在for循环中放入ajax时,它都不能很好地同步 例如,我的代码是: function addToUserGroupList() { _root.qDomId('js-assignGroupArrBtn').disabled = true for (var i = 0; i < selectedIds.length; i++) { $.ajax({ type: "POST",

为什么每次我在for循环中放入ajax时,它都不能很好地同步

例如,我的代码是:

    function addToUserGroupList() {
        _root.qDomId('js-assignGroupArrBtn').disabled = true

        for (var i = 0; i < selectedIds.length; i++) {
            $.ajax({
                type: "POST",
                url: 'groupManage.ashx',
                dataType: 'text',
                data: 'type=getInfo&groupId=' + selectedIds[i],
                success: function (result) {
                    if (result != '') {
                        this.groupName = result.split('&')[0];
                        this.groupNotes = result.split('&')[2];

                        userGroupList.push({ 'uid': parseInt(selectedIds[i]),
                            'name': this.groupName,
                            'adminStr': this.groupNotes
                        });

                        _root.userListObj.gourpInst.gourpTB(userGroupList);
                    }
                },
                error: function (XMLHttpRequest, status, errorThrown) {
                    alert('failed to add to user\'s group.');
                }
            });
        }

        _root.qDomId('js-assignGroupArrBtn').disabled = false;
        selectedIds = [];
    }
函数addToUserGroupList(){
_root.qDomId('js-assignGroupArrBtn')。disabled=true
对于(变量i=0;i
为什么它会调用
selectedIds=[]Ajax查询之前的第一个?

在处理
selectedds=[]之前,是否可以让ajax查询完成?因为它会在完成任务之前清除阵列:/

首先,您确实需要了解Ajax调用是如何异步的(这就是Ajax中的“A”所代表的含义)。这意味着调用
$.ajax()
只会启动ajax调用(它会将请求发送到服务器),其余代码会继续运行。有时,在执行其余代码之后,当服务器返回响应时,会调用成功或错误回调处理程序。这不是顺序编程,必须采用不同的方法

这意味着,在ajax调用之后,您希望发生的任何事情都必须在成功或错误处理程序中,或者从那里调用。位于ajax调用之后的代码将在ajax调用完成之前很久运行


因此,有不同的方法来构造代码,以使用此异步概念。如果一次只需要一个异步ajax调用,那么必须进行这种重构,不能使用简单的
for
循环。相反,您可以创建一个索引变量,并在completion函数中增加索引并开始下一次迭代。这里有一种编码方法:

function addToUserGroupList() {
    _root.qDomId('js-assignGroupArrBtn').disabled = true

    var i = 0;
    function next() {
        if (i < selectIds.length) {
            $.ajax({
                type: "POST",
                url: 'groupManage.ashx',
                dataType: 'text',
                data: 'type=getInfo&groupId=' + selectedIds[i],
                success: function (result) {
                    i++;
                    if (result != '') {
                        this.groupName = result.split('&')[0];
                        this.groupNotes = result.split('&')[2];

                        userGroupList.push({ 'uid': parseInt(selectedIds[i]),
                            'name': this.groupName,
                            'adminStr': this.groupNotes
                        });

                        _root.userListObj.gourpInst.gourpTB(userGroupList);
                    }
                    next();
                },
                error: function (XMLHttpRequest, status, errorThrown) {
                    alert('failed to add to user\'s group.');
                }
            });
        } else {
            // last one done
            _root.qDomId('js-assignGroupArrBtn').disabled = false;
            selectedIds = [];
        }
    }
    // kick off the first one
    next();
}
函数addToUserGroupList(){
_root.qDomId('js-assignGroupArrBtn')。disabled=true
var i=0;
函数next(){
if(i
首先,您确实需要了解Ajax调用是如何异步的(这就是Ajax中的“A”所代表的含义)。这意味着调用
$.ajax()
只会启动ajax调用(它会将请求发送到服务器),其余代码会继续运行。有时,在执行其余代码之后,当服务器返回响应时,会调用成功或错误回调处理程序。这不是顺序编程,必须采用不同的方法

这意味着,在ajax调用之后,您希望发生的任何事情都必须在成功或错误处理程序中,或者从那里调用。位于ajax调用之后的代码将在ajax调用完成之前很久运行


因此,有不同的方法来构造代码,以使用此异步概念。如果一次只需要一个异步ajax调用,那么必须进行这种重构,不能使用简单的
for
循环。相反,您可以创建一个索引变量,并在completion函数中增加索引并开始下一次迭代。这里有一种编码方法:

function addToUserGroupList() {
    _root.qDomId('js-assignGroupArrBtn').disabled = true

    var i = 0;
    function next() {
        if (i < selectIds.length) {
            $.ajax({
                type: "POST",
                url: 'groupManage.ashx',
                dataType: 'text',
                data: 'type=getInfo&groupId=' + selectedIds[i],
                success: function (result) {
                    i++;
                    if (result != '') {
                        this.groupName = result.split('&')[0];
                        this.groupNotes = result.split('&')[2];

                        userGroupList.push({ 'uid': parseInt(selectedIds[i]),
                            'name': this.groupName,
                            'adminStr': this.groupNotes
                        });

                        _root.userListObj.gourpInst.gourpTB(userGroupList);
                    }
                    next();
                },
                error: function (XMLHttpRequest, status, errorThrown) {
                    alert('failed to add to user\'s group.');
                }
            });
        } else {
            // last one done
            _root.qDomId('js-assignGroupArrBtn').disabled = false;
            selectedIds = [];
        }
    }
    // kick off the first one
    next();
}
函数addToUserGroupList(){
_root.qDomId('js-assignGroupArrBtn')。disabled=true
var i=0;
函数next(){
if(i