按照顺序执行异步ajax的回调函数

//按顺序执行多个ajax命令,因为数量不定,所以采用递归
function send(action, arg2) {
    //将多个命令按顺序封装成数组对象,递归执行
    //利用了deferred对象控制回调函数的特点
    $.when(send_action(action[0], arg2))
        .done(function () {
        //前一个ajax回调函数完毕之后判断队列长度
        if (action.length > 1) {
            //队列长度大于1,则弹出第一个,继续递归执行该队列
            action.shift();
            send(action, arg2);
        }
    }).fail(function (){
        //队列中元素请求失败后的逻辑
        //
        //重试发送
        //send(action, arg2);
        //
        //忽略错误进行下个
        //if (action.length > 1) {
            //队列长度大于1,则弹出第一个,继续递归执行该队列
        //    action.shift();
        //    send(action, arg2);
        //}
    });
}

//处理每个命令的ajax请求以及回调函数
function send_action(command, arg2) {
    var dtd = $.Deferred();//定义deferred对象
    $.post(
        "url",
        {
            command: command,
            arg2: arg2
        }
    ).done(function (json) {
        json = $.parseJSON(json);
        //每次请求回调函数的处理逻辑
        //
        //
        //
        //逻辑结束
        dtd.resolve();
    }).fail(function (){
        //ajax请求失败的逻辑
        dtd.reject();
    });
    return dtd.promise();//返回Deferred对象的promise,防止在外部修改状态
}
时间: 2024-07-30 19:36:08

按照顺序执行异步ajax的回调函数的相关文章

struts通过Ajax返回数据时,例如对象类型,没有执行Ajax的回调函数

<result type="json"  name="success">                 <param name="includeProperties">msg.*,对象.*</param>                <!--  <param name="includeProperties">msg</param> -->      

Mina、Netty、Twisted一起学(九):异步IO和回调函数

用过JavaScript或者jQuery的同学都知道,JavaScript特别是jQuery中存在大量的回调函数,比如Ajax.jQuery的动画等. $.get(url, function() { doSomething1(); // (3) }); // (1) doSomething2(); // (2) 上面的代码是jQuery的Ajax,因为Ajax是异步的,所以在请求URL的过程中并不会堵塞程序,也就是程序运行到(1)并不用等待Ajax请求的结果,就继续往下运行(2).而$.get的

。。。Ajax的回调函数function(data)中,data的返回类型。。。

今天在做项目的过程中,突然发现了一个有趣的问题,那就是我在Java服务器端写程序,String result = "0";然后通过out.println(result),将result值写入到Ajax回调函数的参数data中去,返现无论这个result定义为String,还是int,在前台function(data)中,这个data都是int类行的,也就是说如果你用data=="0"这句话测试,返回的是false!只有data==0,才是返回true! 一步一个脚印

ajax success回调函数里return undefined的原因?

最近在做毕业项目,注册表单里用$.ajax提交数据给服务器端php检查账号是否已经注册过,success时函数的返回值为什么总是undefined? var reg_mail = $.trim($("#reg_mail").val()).toLowerCase(); //注册邮箱获取 var reg = /^[a-z0-9]+[@][a-z0-9]+[.][a-z0-9]+$/; //设置邮箱匹配正则 if(reg.test(reg_mail)){ //如果邮箱符合规范就提交服务器进行

从ajax的回调函数(success等)中取返回值

1 var strs = new Array(); 2 3 function getData() { 4 var strs2 = new Array(); 5 $.ajax({ 6 type : "POST", 7 url : "findAttentionGoods.action", 8 data : "pno=" + pageNo, 9 async : false, 10 success : function(msg) { 11 strs2 =

基于消息机制的异步架构之回调函数注册

/* * akg.h * 业务逻辑注册 * */ #ifndef AKG_H_ #define AKG_H_ #include "conn.h" #include "msgqueue.h" #define MAX_PKG_TYPE (0xffff) extern const uint16 g_akg_connected_id; extern const uint16 g_akg_timeout_id; extern const uint16 g_akg_closed

ajax中的post方法中回调函数不执行的问题

前一段时间接触了JQuery Ajax中的.post()方法和.get()方法,感觉到ajax的简洁和强大,当用到.post()方法时,去W3上查找相关的使用方法,感觉十分简单,用法很明了,然后,直接根据自己的需要(js将数据post给php写入数据库,然后返回给js一个值)开写了,写完了,运行,竟然不行!然后仔细地对比我的代码和demo的不同,为了查找错误,将我的代码写的几乎和demo相同了,但是还是无法在js中获得php的数据. 这里先回忆一下.post()方法. jQuery.post(u

一些理解-过滤器,拦截器,ajax提交后不跳转,document.location.href无效,回调函数。

1.struts2中过滤器和拦截器的工作流程: request-->执行自定义过滤器doFilter方法中的chain.doFilter()方法前的代码-->执行默认过滤器doFilter方法中的chain.doFilter()方法前的代码-->执行默认拦截器-->执行自定义拦截器-->访问服务器资源(action,css,html,jsp...)-->执行自定义拦截器-->执行默认拦截器-->执行默认过滤器的doFilter方法中chain.doFilte

不使用回调函数的ajax请求实现(async和await简化回调函数嵌套)

在常规的服务器端程序设计中, 比如说爬虫程序, 发送http请求的过程会使整个执行过程阻塞,直到http请求响应完成代码才会继续执行, 以php为例子 $url = "http://www.google.com.hk"; $result = file_get_contents($url); echo $result; 当代码执行到第二行时,程序便陷入了等待,直到请求完成,程序才会继续往下跑将抓取到的html输出.这种做法的好处是代码简洁明了,运行流程清晰, 容易维护. 缺点就是程序的运