多个jQuery Ajax请求和响应处理

时间:2015-06-19 08:01:22

标签: javascript jquery ajax

我在jQuery网络应用中处理产品的可见/不可见状态(让我们说它是"完整的汽车")。

概述

当用户选择使产品可见/不可见时,我必须列出主要产品的所有子产品(对于"汽车",那些可能是"轮子" ,"刹车",...)。

如果用户选择任何子产品,我必须为每个子产品执行一个Ajax请求,并在其旁边显示响应。

如果所有子产品请求都报告" OK"状态,我必须运行最后一个Ajax请求并对主产品采取行动。如果其中一个子产品请求失败/返回错误,我必须停在那里并且不要在主产品上运行最后一个请求。

我不知道有多少副产品。可能是0,可能是100。

我必须遵循这个流程,我必须对每个子产品使用一个请求,对主要产品使用一个最终请求。

第一个非工作的想法

让我们首先关注所有子产品。这是我用来遍历已检查的子产品的片段。

$ads.each(function () {

    if($check.prop("checked")) {

        $respOk     = $(this).find('img.response-ok');   //this point to the img with "response OK"
        $respErr    = $(this).find('img.response-error');//this point to the img with "response failed"

        $.ajax({
            type: "POST",
            url: "<action_url>",
            data: $form.serializeArray(),
            success: function(msg) {

                if (msg.error == false) {
                    $respOk.slideDown();  //this lags behind and shows the wrong one!
                } else {
                    $respErr.slideDown();  //this lags behind and shows the wrong one!
                }
            },
            error: function(msg) {

                $respErr.slideDown();
            },
            complete: function(msg) {
                $respLoad.stop().slideUp(); //this lags behind and shows the wrong one!
            }
        });

    }//end ad checked

});//end ads loop

问题是:作为非阻塞的Ajax请求,循环立即循环并覆盖$ respOk和$ respErr变量=&gt;当完成/错误触发时,它会评估当前分配的值,并始终在列表的最后一项上显示图像。

第二个非工作想法

在所有ajax请求中使用async:false。这有效,但以不可接受的方式拖延主浏览器线程。

第三个非工作理念

我在辅助函数中移动了ajax请求:

$ads.each(function () {

    if($check.prop("checked")) {

        helperFunctionWithAjaxRequest(<params..>)
    });

    }//end ad checked

});//end ads loop

这实际上解决了第一个实现的问题(每个$ respXX引用指向正确的子产品),并且响应正确显示在其子产品旁边。

但现在我遇到了一个不同的问题:就像前一个问题一样,整个循环立即循环,我无法等待所有请求完成并决定它们是否正确(因此解雇了对主要产品的最后一次请求)或者没有(所以停在那里)。

我想做什么

我基本上试图做这样的事情:

$。当(

$ads.each(function () {

    if($check.prop("checked")) {

        helperFunctionWithAjaxRequest(<params..>)
    });

    }//end ad checked

});//end ads loop

).then(function() {

  //run my code to check if everthing went right (I can already do that)
    //if so, run the Ajax request on the main product (I can already do that)

});

但是我真的无法理解要使用的语法(或者当if / then是正确的方法)。

有任何帮助吗?我非常感谢关于&#34;我想做什么的建议&#34;代码路径。

0 个答案:

没有答案