如何按顺序调用ajax函数?

时间:2016-06-30 12:52:50

标签: javascript jquery ajax

我希望ajax函数在没有asynch: false的情况下一个接一个地执行。因为asynch : false将浏览器置于挂起模式。 我的代码是这样的 我有5个复选框 ch1,ch2,ch3,ch4,ch5  每个都有一个值作为函数名称。用户可以选择任意数量的复选框,但与复选框值相关联的ajax功能应该只能一个接一个地执行。 让用户选择   ch1,ch5,ch3 所以函数应该像

一样执行
f1() -> f3() - >f5();

功能就像这样

function f1(){
    $.ajax({

    });
} 
function f2(){
    $.ajax({

    });
} 
function f3(){
    $.ajax({

    });
}
.
.
so on 

我尝试在ajax成功方法中调用连续函数,但如果用户选择随机复选框,则会产生问题。

5 个答案:

答案 0 :(得分:1)

我有类似的情况。
解决方案
首先创建一个选定复选框的数组,其值为数组元素。然后创建一个检查该值的函数并调用其相应的函数。

 function callRequired(array) {
            var required = array[0];
            if (required === "f1") {
                f1(array);
            }
            if (required === "f2") {
                f2(array);
            }
            if (required === "f3") {
                f3(array);
            }
            if (required === "f4") {
                f4(array);
            }
            if (required === "f5") {
                f5(array);
            }
        }

我们在这里检查第一个元素是否需要回调。然后在每次成功后将其删除。只需删除该元素,然后通过删除前一个元素来调用callRequired(array),如下所示

function f1(array) {
        jQuery.ajax({
            url: "some/url",
            success: function (response) {
                array.splice(0, 1);
                callRequired(array);
            }
        });
    }
function f2(array) {
        jQuery.ajax({
            url: "some/url",
            success: function (response) {
                array.splice(0, 1);
                callRequired(array);
            }
        });
    }
function f3(array) {
        jQuery.ajax({
            url: "some/url",
            success: function (response) {
                array.splice(0, 1);
                callRequired(array);
            }
        });
    }
function f4(array) {
        jQuery.ajax({
            url: "some/url",
            success: function (response) {
                array.splice(0, 1);
                callRequired(array);
            }
        });
    }
function f5(array) {
        jQuery.ajax({
            url: "some/url",
            success: function (response) {
                array.splice(0, 1);
                callRequired(array);
            }
        });
    }

希望这有效。感谢

答案 1 :(得分:0)

你可以使用一个公共类来调用复选框更改事件,而不是在你也可以在复选框的数据属性中定义一些唯一的id并使用jquery属性方法根据你可以调用ajax的值来获取它。

答案 2 :(得分:0)

互相调用一个函数,例如:

function f1(){
    $.ajax({
        success: function(){
            f2();
        }
    });
} 
function f2(){
    $.ajax({
        success: function(){
            f3();
        }
    });
}

答案 3 :(得分:0)

您可以使用jQuery.when

var ajax1 = $.ajax(...);
var ajax2 = $.ajax(...);

//You can pass as much arguments as needed here
$.when(ajax1, ajax2).done(function(){
    alert('All requests complete');
});

请参阅文档以供参考:https://api.jquery.com/jquery.when/

答案 4 :(得分:0)

鉴于我没有示例代码,我会这样做。

  • 将每个元素关联到要调用的函数。比如,一个对象具有与复选框id相对应的键,以及与回调相对应的值:
  • 通过jQuery选中所有复选框,保留顺序
  • 过滤掉未选中的
  • 将获取的复选框列表映射到一个数组,其元素是值(=回调函数)

你现在应该有:

var callbacks = [callback_one, callback_three, callback_four];

理想情况下,“one”,“three”,“four”是对应选中复选框的回调。然后保留一个指向当前回调的整数值。

最后,您启动第一个回调。在success时,您增加整数值,如果它小于回调列表的长度,则调用下一个回调。