Javascript 在迭代父循环之前返回AJAX数据

Javascript 在迭代父循环之前返回AJAX数据,javascript,jquery,ajax,Javascript,Jquery,Ajax,对不起,伙计们,尽管我在网上读到了各种各样的场景,但我似乎无法理解这一点。因此,情况如下: 我有一个字符串数组,名为recipientsList 对于该数组中的每个字符串,我希望进行一个AJAX调用,将该字符串作为参数传入,然后将数据从AJAX返回给回调函数 我的代码如下。发生的情况是,如果我在recipientsList数组中有三个字符串,那么我的expandDistributionList函数会被调用三次,但代码在每次完成迭代之前都不会命中AJAX调用的成功部分。想法 function ex

对不起,伙计们,尽管我在网上读到了各种各样的场景,但我似乎无法理解这一点。因此,情况如下:

我有一个字符串数组,名为
recipientsList

对于该数组中的每个字符串,我希望进行一个AJAX调用,将该字符串作为参数传入,然后将数据从AJAX返回给回调函数

我的代码如下。发生的情况是,如果我在
recipientsList
数组中有三个字符串,那么我的
expandDistributionList
函数会被调用三次,但代码在每次完成迭代之前都不会命中AJAX调用的成功部分。想法

function expandDistributionList(emailAddress, cb) {
    $.ajax({
        url: "/expandDistributionList",
        type: 'get',
        dataType: 'json',
        context: this,
        data: {
            distListName: emailAddress,
        },          
        success: function(data) {
            cb(data);
        },
        error: function() {                
            ace.search.mainframeErrorSignal = $.signal({
                'message': 'Unable to expand distribution list.',
                'addClass': 'error',
                'sticky': true
            });
        }
   });
}

recipientsList.each(function(item) {
    expandDistributionList(item, function(data){
        if(data...) {
             //do some code here
        }
        else {
             //do something else
        }
    });
});
嗯, 我不确定,但这对我的代码有效

    function sendAsJSON(url, data, async, successCallback, errorCallback) {
        $.ajax({
            url: url,
            data: data,
            type: "POST",
            async: true,
            dataType: "json",
            contentType: "application/json;charset=utf-8",
            success: function (data) {
                if (successCallback != null) {
                    successCallback(data.d);
                }
            },
            error: function (errorData) {
                if (errorCallback != null) {
                    errorCallback();
                }
            }
        });
    }

您是否介意将“GET”更改为“POST”并添加contenttype。

这是JavaScript事件模型的标准行为,您的回调将在事件队列中排队,并将在主代码完成工作后执行

因为我的英语很差,所以我从AsyncJavaScript一书中得到了一些关于这方面的描述

JavaScript中事件调度的易用性是该语言最重要的特性之一 功能强大。像setTimeout这样的异步函数使执行延迟 简单,没有产生线程。JavaScript代码永远不会被中断, 报告勘误表,因为事件只能在代码运行时排队;他们不能开火,除非 完成了


您可以使用promise链接您的异步请求,这是一个很好的示例

hmm,不确定上面的代码将如何解决在.each完成后ajax调用完成的问题。你能解释一下吗?嗯,我不确定,我试着把我的一些代码放在一个循环中,效果很好。你介意试试这个吗?这是有道理的,但它并没有真正阐明如何围绕这个问题进行编码。你能发布一个我可以遵循的代码解决方案吗?@Leann为什么这种行为对你来说是个问题?除非同步请求,否则无法停止循环并等待请求成功。我认为设置async:false很麻烦,因为它可能会严重冻结浏览器,因此我正在寻找替代解决方案。是的,这可能会严重冻结浏览器,这真的很糟糕。那么,您希望一个接一个地执行异步请求,这对吗?