X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F06_net%2F00_XNet.js;h=3e7b4543393872f9baf25458cfcba06c375c4b53;hb=HEAD;hp=af64b4d1ff62eb8cdd379002efef9d7d27b16103;hpb=eca68ae8a52822bb0d2d7556fd28784bb2103a2f;p=pettanr%2FclientJs.git diff --git a/0.6.x/js/06_net/00_XNet.js b/0.6.x/js/06_net/00_XNet.js index af64b4d..3e7b454 100644 --- a/0.6.x/js/06_net/00_XNet.js +++ b/0.6.x/js/06_net/00_XNet.js @@ -22,9 +22,10 @@ *

必須プロパティ

*
*
url
URL - *
type
'xhr', 'jsonp', 'image', 'img' + *
type
'xhr', 'jsonp', 'form', 'image', 'img' *
xhr
URL { url : 'hoge', type : 'xhr' } の省略形 *
jsonp
URL { url : 'hoge', type : 'jsonp' } の省略形 + *
form
URL { url : 'hoge', type : 'form' } の省略形 *
image, img
URL { url : 'hoge', type : 'image' } の省略形 *
*

XHR 用プロパティ

@@ -50,14 +51,16 @@ *
params
url パラメータを object で渡すことが出来る。 *
callbackName
callback(json) コールバック名が固定されている際に指定。または &callback=hoge 以外の名前でコールバックを指定する場合に params と callbackName に書いておく。url パラメータに callback が無く、callbackName もない場合、フレームワーク内で自動で設定される *
charset
ページと異なるjsonpを読み込む場合に指定 'EUC-JP', 'Shift-JIS' 等 script タグの charset に入る。https://code.google.com/p/ajaxzip3/issues/detail?id=5 - *
useFireWall
異なるドメインに jsonp を読み込んだ後、xdomain iframe 通信を使ってデータを受け取る。不正なコードの実行を防ぐことが出来る、未実装 + *
useFireWall
異なるドメインに jsonp を読み込んだ後、xdomain iframe 通信を使ってデータを受け取る。不正なコードの実行を防ぐことが出来る(はず)、未実装 * * *

Form 用プロパティ

*
- *
params
url パラメータを object で渡すことが出来る。 *
method
'GET' or 'POST' - *
target
'_self', '_parent', '_top' の場合、ページから離脱する。target を指定せず同一ドメインの場合 response に body.innerHTML が返る。 + *
params
パラメータ object は input タグの name & value に展開される。object を入れ子にすることはできない。 + *
target
'_self', '_parent', '_top' の場合、ページから離脱する。target を指定せず同一ドメインの場合 response に body.innerHTML が返る。TODO X.Window + *
timeout
ms タイムアウト時間、省略可能 + *
charset
未実装 *
* * @alias X.Net @@ -155,8 +158,8 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ]( opt[ 'auth' ] = auth; // auth は deep copy されるとまずい }; - // params を url に追加 - if( opt[ 'params' ] ){ + // params を url に追加 但し form は除く + if( opt[ 'params' ] && type !== X_NET_TYPE_FORM ){ url = X_URL_create( url, opt[ 'params' ] ); delete opt[ 'params' ]; }; @@ -166,14 +169,14 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ]( // XDomain 不可 -> Flash, Gears, Silverlight, canUseGadget なら gadget に切替? // PUT DELETE UPDATE 不可 -> Flash, Gears, Silverlight, canUseGadget なら gadget に切替? - // xプロトコル な binary のロード -> gadget 内で proxyURL による XHR + // xプロトコル(X_URL_isSameProtocol) な binary のロード -> gadget 内で proxyURL による XHR // or X_EVENT_ERROR opt[ 'dataType' ] = opt[ 'dataType' ] || X_URL_getEXT( url ); }; opt.netType = type; - opt[ 'url' ] = url; + opt[ 'url' ] = url; X_Pair_create( this, opt ); @@ -218,11 +221,11 @@ var X_NET_TYPE_XHR = 1, X_NET_QUEUE_LIST = [], - X_NET_XHRWrapper, - X_NET_JSONPWrapper, - X_NET_FormWrapper, - X_NET_ImageWrapper, - X_NET_GIMRWrapper, + X_XHR, + X_JSONP, + X_FormSender, + X_ImgLoader, + X_GadgetXHR, X_NET_currentWrapper, X_NET_currentQueue, @@ -239,13 +242,13 @@ function X_NET_proxyDispatch( e ){ this[ 'unlisten' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch ) [ 'dispatch' ]( X_EVENT_COMPLETE ); }; - X_NET_shiftQueue(); + X_NET_shiftQueue( true ); X_Pair_release( this ); X_NET_completePhase = 0; } else if( this === X_NET_currentQueue ){ X_NET_currentWrapper.cancel(); - X_NET_shiftQueue(); + X_NET_shiftQueue( true ); flag = true; } else if( ( i = X_NET_QUEUE_LIST.indexOf( this ) ) !== -1 ){ @@ -276,6 +279,8 @@ function X_NET_proxyDispatch( e ){ this[ 'listenOnce' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch ) [ 'asyncDispatch' ]( 32, { type : X_EVENT_COMPLETE, 'lastEventType' : e.type } ); + // target を上書き X_NET_currentWrapper -> X_NET_currentQueue + e[ 'target' ] = e[ 'currentTarget' ] = this; this[ 'asyncDispatch' ]( e ); break; @@ -286,11 +291,12 @@ function X_NET_proxyDispatch( e ){ }; }; -function X_NET_shiftQueue(){ - var auth, authSettings; +// TODO _busy は X.Net で触る. +function X_NET_shiftQueue( currentKilled ){ + var q, auth, authSettings; if( X_NET_currentQueue ){ - if( X_NET_currentWrapper._busy ) return; + if( !currentKilled ) return; X_NET_currentWrapper [ 'unlisten' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR ], X_NET_currentQueue, X_NET_proxyDispatch ) @@ -304,7 +310,7 @@ function X_NET_shiftQueue(){ if( !X_NET_QUEUE_LIST.length ) return; - X_NET_currentQueue = X_NET_QUEUE_LIST.shift(); + X_NET_currentQueue = q = X_NET_QUEUE_LIST.shift(); X_NET_currentData = X_Pair_get( X_NET_currentQueue ); switch( X_NET_currentData.netType ){ @@ -314,13 +320,13 @@ function X_NET_shiftQueue(){ // force 'gadget', 'flash' switch( X_NET_currentData[ 'test' ] ){ case 'gadget' : - X_NET_currentWrapper = X_NET_GIMRWrapper || X_TEMP.X_Net_GIMR_init(); + X_NET_currentWrapper = X_GadgetXHR || X_TEMP.X_GadgetXHR_init(); break; case 'flash' : break; default : - X_NET_currentWrapper = X_NET_XHRWrapper || X_TEMP.X_Net_XHR_init(); + X_NET_currentWrapper = X_XHR || X_TEMP.X_XHR_init(); }; @@ -332,12 +338,17 @@ function X_NET_shiftQueue(){ case 1 : case 2 : if( !( auth[ 'dispatch' ]( X_EVENT_NEED_AUTH ) & X_CALLBACK_PREVENT_DEFAULT ) ){ - authSettings.lazyRequests = authSettings.lazyRequests || []; - authSettings.lazyRequests.indexOf( X_NET_currentQueue ) === -1 && authSettings.lazyRequests.push( X_NET_currentQueue ); + // event 内で kill されていないことを確認 + if( X_NET_currentQueue === q ){ + authSettings.lazyRequests = authSettings.lazyRequests || []; + authSettings.lazyRequests.indexOf( q ) === -1 && authSettings.lazyRequests.push( q ); + X_NET_currentQueue = null; + X_NET_shiftQueue(); + }; + } else { + X_NET_currentQueue === q && q[ 'kill' ](); }; - X_NET_currentQueue = null; - X_NET_shiftQueue(); - break; + return; case 3 : // refresh token X_NET_QUEUE_LIST.push( X_NET_currentQueue ); X_NET_currentQueue = null; @@ -348,13 +359,13 @@ function X_NET_shiftQueue(){ }; break; case X_NET_TYPE_JSONP : - X_NET_currentWrapper = X_NET_JSONPWrapper || X_TEMP.X_NET_JSONP_init(); + X_NET_currentWrapper = X_JSONP || X_TEMP.X_JSONP_init(); break; case X_NET_TYPE_FORM : - X_NET_currentWrapper = X_NET_FormWrapper || X_TEMP.X_NET_Form_init(); + X_NET_currentWrapper = X_FormSender || X_TEMP.X_FormSender_init(); break; case X_NET_TYPE_IMAGE : - X_NET_currentWrapper = X_NET_ImageWrapper || X_TEMP.X_NET_Image_init(); + X_NET_currentWrapper = X_ImgLoader || X_TEMP.X_ImgLoader_init(); break; };