注册 登录
LUPA开源社区 返回首页

红黑魂的个人空间 http://www.lupaworld.com/?436905 [收藏] [复制] [分享] [RSS]

我的博客

使用Jscex优化Ajax操作体验

已有 3762 次阅读2011-9-29 14:03 |系统分类:IT技术

Ajax是异步的,这是它的优势,但是写出的代码却不那么美观,处处的回调函数总让人不爽,碰到嵌套的情况则会让人抓狂了。

设想这样的情况,一个Ajax请求需要一个参数data,而这个参数是另外一个Ajax请求的结果。按照一般的写法(Ajax使用了jQuery):

            $(function(){
                $.ajax({
                    url:"/getFirstData",
                    success:function(firstData){
                        //firstData:第一个结果

                        //第二次请求
                        $.ajax({
                            url:"/getSecondData",
                            data:{data:firstData},
                            success:function(secondData){
                                //这里猜得到第二次请求的值
                            }
                        })
                    }
                })
            })

看起来也可以接受,但是如果第一个结果不符合要求需要重新获取呢?修改之后的代码简直无法想象。

Jscex是一个优秀的异步JS库,借助它我们可以写出“顺序”的代码。

首先我给jQuery.ajax写一个Jscex适配器

jQuery.ajaxJscex = function (option) {
    var delegate = {
        "onStart": function (callback) {
            jQuery.extend(option, {
                success: function (data) {
                    callback("success", data);
                },
                error: function () { callback("failure"); }
            });
            $.ajax(option);
        }
    };
    return new Jscex.Async.Task(delegate);
}


然后上面的逻辑代码就可以简化为

                var task = eval(Jscex.compile("async",function(){
                    //第一结果
                    var firstData = $await($.ajaxJscex({
                        url: '/getFirstData'
                    }));
                    //第二结果
                    var secondData = $await($.ajaxJscex({
                        url: '/getFirstData',
                        data:{data:firstData}
                    }));
                }));
                task().start();


很清晰。

关于更多Jscex的信息请查看老赵的博客。 摘自博客园

评论 (0 个评论)

facelist

您需要登录后才可以评论 登录 | 注册
验证问答 换一个 验证码 换一个

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部