注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

星期五

明天不上班

 
 
 

日志

 
 
关于我

一个特立独行的Java程序员,比较宅,上上网,写博客,听音乐,看电影。

网易考拉推荐

YUI Ajax同步方式  

2011-06-13 20:17:24|  分类: Yui |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

YUI2.8 只提供了Ajax的异步方式

asyncRequest:function(method,uri,callback,postData)

所以我们需要写自己的同步方法,我们可以借鉴asyncRequest的写法

在这里可以找到Connection的源码 http://developer.yahoo.com/yui/docs/connection_core.js.html

 

简单的写一个Get的同步模式

var sendRequest = function(uri,callback){

       var connObject = YAHOO.util.Connect.getConnectionObject();

        connObject.conn.open('GET', url , false);

        connObject.conn.send();

         

        if(connObject .conn && connObject .conn.readyState === 4){

                YAHOO.util.Connect.handleTransactionResponse(syncConn, callback);
        }
        return connObject;

}


源码中有处理超时,自定义参数,事件的处理,在 handleReadyState:function(o,callback) 中


handleReadyState:function(o, callback)

    {

        var oConn = this,

            args = (callback && callback.argument)?callback.argument:null;

       if(callback && callback.timeout){ // 超时

            this._timeOut[o.tId] = window.setTimeout(function(){ oConn.abort(o, callback, true); }, callback.timeout);

        }

        this._poll[o.tId] = window.setInterval(

            function(){

                if(o.conn && o.conn.readyState === 4){

                    // Clear the polling interval for the transaction

                    // and remove the reference from _poll.

                    window.clearInterval(oConn._poll[o.tId]);

                    delete oConn._poll[o.tId];

                    if(callback && callback.timeout){

                        window.clearTimeout(oConn._timeOut[o.tId]);

                        delete oConn._timeOut[o.tId];

                    }

                    // Fire global custom event -- completeEvent

                    oConn.completeEvent.fire(o, args);

                    if(o.completeEvent){

                        // Fire transaction custom event -- completeEvent

                        o.completeEvent.fire(o, args);

                    }

                    oConn.handleTransactionResponse(o, callback);

                }

            }

        ,this._polling_interval);

    }


更完整的写法:

var sendRequest = function(method, url, sync, callback, postData){

        var connObj = YAHOO.util.Connect.getConnectionObject();

        connObj.conn.open(method, url , sync);

        connObj.conn.send(postData || '');

        if(connObj.conn && connObj.conn.readyState === 4){

        var args = (callback && callback.argument)?callback.argument:null;

        if(callback && callback.timeout){

        YAHOO.util.Connect._timeOut[connObj.tId] = 

        window.setTimeout(function(){ YAHOO.util.Connect.abort(connObj, callback, true); }, callback.timeout);

            }

            YAHOO.util.Connect.completeEvent.fire(connObj, args);

            if(connObj.completeEvent){

                connObj.completeEvent.fire(connObj, args);

            }

            YAHOO.util.Connect.handleTransactionResponse(connObj, callback);

        }

            return connObj;

}



  评论这张
 
阅读(479)| 评论(0)
推荐

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017