X-Git-Url: http://git.osdn.jp/view?a=blobdiff_plain;f=0.6.x%2Fjs%2F06_net%2F00_XNet.js;h=2dc443287c9088c638368378d081c7362f0eda08;hb=1bfbfbb850a390a1c46546d445961966e4cdf063;hp=e400763feef065f69829e825cb52110dd2776aa9;hpb=6127f2e265f95fdc47335a914a20be355bcd83af;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 e400763..2dc4432 100644
--- a/0.6.x/js/06_net/00_XNet.js
+++ b/0.6.x/js/06_net/00_XNet.js
@@ -7,17 +7,16 @@
/**
- *
busy() ã¡ã½ããã ããæã¤ãéä¿¡ç¨ã®ããããã£ã¯ X.Pair ã«ãã£ã¦é è½ãããã
+ *
state() ã¡ã½ããã ããæã¤ãéä¿¡ç¨ã®ããããã£ã¯ X.Pair ã«ãã£ã¦é è½ããã¦ãã¾ãã
*
éä¿¡ã®ãã£ã³ã»ã«
- * kill() ã§éä¿¡å¾
ã¡ä¸ã¯ãã£ã³ã»ã«&ç ´æ£ãéä¿¡ä¸ã®å ´åã¯éä¿¡ã®ä¸æ&ç ´æ£ãè¡ããSUCCESS, ERROR, TIMEOUT ã¤ãã³ã以é㯠kill() ã¯ç¡è¦ãããã
+ *
kill() ã§éä¿¡å¾
ã¡ä¸ã¯ãã£ã³ã»ã«&ç ´æ£ãéä¿¡ä¸ã®å ´åã¯éä¿¡ã®ä¸æ&ç ´æ£ãè¡ãã
*
ã¤ãã³ã
*
* - X.Event.PROGRESS
- éä¿¡é²è¡ç¶æ³
*
- X.Event.SUCCESS
- éä¿¡æå
- *
- X.Event.ERROR
- éä¿¡ã¨ã©ã¼
- *
- X.Event.TIMEOUT
- éä¿¡ã¿ã¤ã ã¢ã¦ã
- *
- X.Event.CANCELED
- éä¿¡ã®ã¦ã¼ã¶ã¼ãããã°ã©ã ã«ãããã£ã³ã»ã«
- *
- X.Event.COMPLETE
- éä¿¡å®äºãSUCCESS, ERROR, TIMEOUT, CANCELED å¾ã«çºçã
+ *
- X.Event.ERROR
- éä¿¡ã¨ã©ã¼ãã¿ã¤ã ã¢ã¦ãã®å ´åãe.timeout == true ã§åããã
+ *
- X.Event.CANCELED
- éä¿¡ã®ã¦ã¼ã¶ã¼ãããã°ã©ã ã«ãããã£ã³ã»ã«ãSUCCESS, ERROR, COMPLETE å¾ã« kill()ãã¦ãCANCELEDã¯å¼ã°ãã¾ããã
+ *
- X.Event.COMPLETE
- éä¿¡å®äºãSUCCESS, ERROR, CANCELED å¾ã«çºçã
*
* X.Net ã¤ã³ã¹ã¿ã³ã¹ã¯ COMPLETE å¾ã«èªåã§ç ´æ£ãããã
*
å¿
é ããããã£
@@ -31,6 +30,7 @@
* XHR ç¨ããããã£
*
* - method
- 'GET', 'POST' æªæå®ã㤠postdata ãè¨å®ãã¦ããå ´åã'POST' ã«ãªãã
+ *
- params
- url ãã©ã¡ã¼ã¿ã object ã§æ¸¡ããã¨ãåºæ¥ãã
*
- postdata
- string, object ã®å ´å㯠X.String.serialize ãããã
*
- async
- boolean
*
- username
- BASIC èªè¨¼
@@ -41,6 +41,23 @@
*
- dataType
- 'text', 'json', 'xml', 'blob', 'arraybuffer' çãxhr.responseType ã«æå®ããå¤
*
- mimeType
- 'text/xml', 'audio/mpeg' çãxhr.overrideMimeType ããå¤
*
- auth
- X.OAuth2 ã¤ã³ã¹ã¿ã³ã¹(OAuth2 ãµã¼ãã¹ã®å®ç¾©)
+ *
- getFullHeaders
- getAllResponseHeaders() ããã¼ã¹ããããã·ã¥ãè¿ããå¤ã¯é
åã«ãªã£ã¦ãããXDR 㯠Content-Type ããåå¾ã§ããªãã
+ *
- canUse
- æªå®è£
ãgadget proxy, YQL,
YPipes çã®ããã·ã¥ã¢ããã®è¨±å¯ãç¾å¨ã¯ test : 'gadget' ã¨ãã¦ãã
+ *
+ *
+ * JSONP ç¨ããããã£
+ *
+ * - 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 éä¿¡ã使ã£ã¦ãã¼ã¿ãåãåããä¸æ£ãªã³ã¼ãã®å®è¡ãé²ããã¨ãåºæ¥ããæªå®è£
+ *
+ *
+ * Form ç¨ããããã£
+ *
+ * - params
- url ãã©ã¡ã¼ã¿ã object ã§æ¸¡ããã¨ãåºæ¥ãã
+ *
- method
- 'GET' or 'POST'
+ *
- target
- '_self', '_parent', '_top' ã®å ´åããã¼ã¸ããé¢è±ãããtarget ãæå®ããåä¸ãã¡ã¤ã³ã®å ´å response ã« body.innerHTML ãè¿ãã
*
*
* @alias X.Net
@@ -52,11 +69,17 @@
* .listen( X.Event.PROGRESS )
* .listenOnce( [ X.Event.SUCCESS, X.Event.ERROR, X.Event.TIMEOUT, X.Event.CANCELED ] );
*
+ * // XHR - GET
+ * var net = X.Net( urlString );
+ *
* // XHR - POST
* var net = X.Net( { xhr : urlString, postdata : myData } );
*
* // JSONP
- * var net = X.Net( { jsonp : urlString, staticCallbackName : callbackName, useXDomainWall : false } );
+ * var net = X.Net( { jsonp : urlString, params : params, callbackName : callbackName, charset : charset, useFireWall : false } );
+ *
+ * // Form
+ * var net = X.Net( { form : urlString, method : 'POST', target : '_self', params : {} } );
*
* // Image preload & getSize
* var net = X.Net( { image : src, sizeDetection : true } );
@@ -67,58 +90,45 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ](
'X.Net',
X_Class.NONE,
{
- 'netType' : '',
- 'netName' : '',
- 'netVersion' : 0,
'Constructor' : function( urlOrObject, opt_options ){
- var v, opt, url, type, auth;
+ var opt, url, type, auth;
if( X_Type_isObject( opt = urlOrObject ) ){
- if( v = opt[ 'xhr' ] ){
- url = v;
+ //{+xhr
+ if( X_Type_isString( url = opt[ 'xhr' ] ) ){
type = X_NET_TYPE_XHR;
} else
- if( v = opt[ 'jsonp' ] ){
- url = v;
+ //}+xhr
+ //{+jsonp
+ if( X_Type_isString( url = opt[ 'jsonp' ] ) ){
type = X_NET_TYPE_JSONP;
} else
- if( v = opt[ 'img' ] || opt[ 'image' ] ){
- url = v;
+ //}+jsonp
+ //{+netimage
+ if( X_Type_isString( url = opt[ 'img' ] || opt[ 'image' ] ) ){
type = X_NET_TYPE_IMAGE;
} else
- if( v = opt[ 'form' ] ){
- url = v;
+ //}+netimage
+ //{+netform
+ if( X_Type_isString( url = opt[ 'form' ] ) ){
type = X_NET_TYPE_FORM;
} else
- if( v = opt[ 'type' ] ){
-
- switch( v ){
- case 'xhr' :
- type = X_NET_TYPE_XHR;
- break;
- case 'jsonp' :
- type = X_NET_TYPE_JSONP;
- break;
- case 'img' :
- case 'image' :
- type = X_NET_TYPE_IMAGE;
- break;
- case 'from' :
- type = X_NET_TYPE_FORM;
- break;
- default :
- alert( 'X.Net args error' );
- return;
- };
- url = opt[ 'url' ];
+ //}+netform
+ if( !( type = X_NET_NAME_TO_ID[ opt[ 'type' ] ] ) ){
+ //{+dev
+ alert( 'X.Net args error' );
+ //}+dev
+ return;
+ } else {
+ url = opt[ 'url' ];
};
-
+ //{+dev
if( !X_Type_isString( url ) ){
alert( 'X.Net args error' );
return;
};
-
+ //}+dev
} else
if( X_Type_isString( urlOrObject ) ){
url = urlOrObject;
@@ -129,12 +139,14 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ](
type = X_NET_TYPE_XHR;
opt = { 'url' : url, 'method' : 'GET' };
};
-
+ //{+dev
} else {
alert( 'X.Net args error' );
return;
+ //}+dev
};
+ // auth ã®éé¿
if( auth = opt[ 'auth' ] ){
delete opt[ 'auth' ];
};
@@ -142,12 +154,16 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ](
if( auth ){
opt[ 'auth' ] = auth; // auth 㯠deep copy ãããã¨ã¾ãã
};
- opt.netType = type;
- opt[ 'url' ] = url;
+
+ // params ã url ã«è¿½å
+ if( opt[ 'params' ] ){
+ url = X_URL_create( url, opt[ 'params' ] );
+ delete opt[ 'params' ];
+ };
if( type === X_NET_TYPE_XHR ){
opt[ 'method' ] = opt[ 'method' ] || ( opt[ 'postdata' ] ? 'POST' : 'GET' );
-
+
// XDomain ä¸å¯ -> Flash, Gears, Silverlight, canUseGadget ãªã gadget ã«åæ¿?
// PUT DELETE UPDATE ä¸å¯ -> Flash, Gears, Silverlight, canUseGadget ãªã gadget ã«åæ¿?
// xãããã³ã« 㪠binary ã®ãã¼ã -> gadget å
㧠proxyURL ã«ãã XHR
@@ -156,20 +172,25 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ](
opt[ 'dataType' ] = opt[ 'dataType' ] || X_URL_getEXT( url );
};
+ opt.netType = type;
+ opt[ 'url' ] = url;
+
X_Pair_create( this, opt );
- this[ 'listen' ]( [ X_EVENT_BEFORE_KILL_INSTANCE, X_EVENT_KILL_INSTANCE ], X_NET_proxyDispatch );
+ this[ 'listen' ]( X_EVENT_KILL_INSTANCE, X_NET_proxyDispatch );
X_NET_QUEUE_LIST[ X_NET_QUEUE_LIST.length ] = this;
!X_NET_currentQueue && X_NET_shiftQueue();
},
-
+
/**
- * ç¾å¨éä¿¡ä¸ãï¼èª¿ã¹ããfalse ã®å ´åãéä¿¡ã®é çªå¾
ã¡ããéä¿¡ãçµäºãã¦ããã
- * @alias Net.prototype.busy
+ * ç¾å¨ã®ç¶æ
ã1:é çªå¾
ã¡, 2:éä¿¡ä¸, 3:éä¿¡å®äºãã§ã¼ãº
+ * @alias Net.prototype.state
*/
- 'busy' : function(){
- return this === X_NET_currentQueue && X_NET_currentWrapper._busy;
+ 'state' : function(){
+ return this === X_NET_currentQueue ?
+ ( X_NET_completePhase ? 3 : 2 ) :
+ 0 <= X_NET_QUEUE_LIST.indexOf( this ) ? 1 : 0;
}
}
);
@@ -187,6 +208,14 @@ var X_NET_TYPE_XHR = 1,
X_NET_TYPE_FORM = 3,
X_NET_TYPE_IMAGE = 4,
+ X_NET_NAME_TO_ID = {
+ 'xhr' : X_NET_TYPE_XHR,
+ 'jsonp' : X_NET_TYPE_JSONP,
+ 'form' : X_NET_TYPE_FORM,
+ 'img' : X_NET_TYPE_IMAGE,
+ 'image' : X_NET_TYPE_IMAGE
+ },
+
X_NET_QUEUE_LIST = [],
X_NET_XHRWrapper,
@@ -204,21 +233,24 @@ function X_NET_proxyDispatch( e ){
var i, flag, auth;
switch( e.type ){
- case X_EVENT_BEFORE_KILL_INSTANCE :
- if( this === X_NET_currentQueue && X_NET_completePhase ) return X_Callback_PREVENT_DEFAULT;
- break;
-
case X_EVENT_KILL_INSTANCE :
- i = X_NET_QUEUE_LIST.indexOf( this );
-
- if( i !== -1 ){
- X_NET_QUEUE_LIST.splice( i, 1 );
- flag = true;
+ if( this === X_NET_currentQueue && X_NET_completePhase ){
+ if( X_NET_completePhase === 1 ){
+ this[ 'unlisten' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch )
+ [ 'dispatch' ]( X_EVENT_COMPLETE );
+ };
+ X_NET_shiftQueue();
+ X_Pair_release( this );
+ X_NET_completePhase = 0;
} else
if( this === X_NET_currentQueue ){
X_NET_currentWrapper.cancel();
X_NET_shiftQueue();
flag = true;
+ } else
+ if( ( i = X_NET_QUEUE_LIST.indexOf( this ) ) !== -1 ){
+ X_NET_QUEUE_LIST.splice( i, 1 );
+ flag = true;
};
if( flag ){ // flag ãç«ã¤å ´åãããã¯ä¸æ
@@ -235,22 +267,20 @@ function X_NET_proxyDispatch( e ){
if( e.status === 401 ){
if( auth = X_Pair_get( this )[ 'auth' ] ){
X_Pair_get( auth ).onAuthError( auth, e );
+ // TODO ç ´æ£ããªãã§å¾
æ©ã
};
};
case X_EVENT_SUCCESS :
- case X_EVENT_TIMEOUT :
- X_NET_completePhase = true;
- this
- [ 'listenOnce' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch )
- [ 'unlisten' ]( [ X_EVENT_BEFORE_KILL_INSTANCE, X_EVENT_KILL_INSTANCE ], X_NET_proxyDispatch )
- [ 'asyncDispatch' ]( e );
- this[ 'asyncDispatch' ]( 32, { type : X_EVENT_COMPLETE, 'lastEventType' : e.type } );
+ X_NET_completePhase = 1;
+ this[ 'listenOnce' ]( X_EVENT_COMPLETE, X_NET_proxyDispatch )
+ [ 'asyncDispatch' ]( 32, { type : X_EVENT_COMPLETE, 'lastEventType' : e.type } );
+
+ this[ 'asyncDispatch' ]( e );
break;
+
case X_EVENT_COMPLETE :
- X_Pair_release( this );
- X_NET_shiftQueue();
- X_NET_completePhase = false;
+ X_NET_completePhase = 2;
this[ 'kill' ]();
break;
};
@@ -261,9 +291,11 @@ function X_NET_shiftQueue(){
if( X_NET_currentQueue ){
if( X_NET_currentWrapper._busy ) return;
+
X_NET_currentWrapper
- [ 'unlisten' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_TIMEOUT ], X_NET_currentQueue, X_NET_proxyDispatch )
+ [ 'unlisten' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR ], X_NET_currentQueue, X_NET_proxyDispatch )
.reset();
+
X_NET_currentQueue = X_NET_currentWrapper = X_NET_currentData = null;
};
@@ -297,7 +329,8 @@ function X_NET_shiftQueue(){
case 1 :
case 2 :
if( !( auth[ 'dispatch' ]( X_EVENT_NEED_AUTH ) & X_Callback_PREVENT_DEFAULT ) ){
- authSettings.lazyReq = X_NET_currentQueue;
+ authSettings.lazyRequests = authSettings.lazyRequests || [];
+ authSettings.lazyRequests.indexOf( X_NET_currentQueue ) === -1 && authSettings.lazyRequests.push( X_NET_currentQueue );
};
X_NET_currentQueue = null;
X_NET_shiftQueue();
@@ -315,14 +348,14 @@ function X_NET_shiftQueue(){
X_NET_currentWrapper = X_NET_JSONPWrapper || X_TEMP.X_NET_JSONP_init();
break;
case X_NET_TYPE_FORM :
- X_NET_currentWrapper = X_NET_FormWrapper;
+ X_NET_currentWrapper = X_NET_FormWrapper || X_TEMP.X_NET_Form_init();
break;
case X_NET_TYPE_IMAGE :
X_NET_currentWrapper = X_NET_ImageWrapper || X_TEMP.X_NET_Image_init();
break;
};
- X_NET_currentWrapper[ 'listen' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR, X_EVENT_TIMEOUT ], X_NET_currentQueue, X_NET_proxyDispatch );
+ X_NET_currentWrapper[ 'listen' ]( [ X_EVENT_PROGRESS, X_EVENT_SUCCESS, X_EVENT_ERROR ], X_NET_currentQueue, X_NET_proxyDispatch );
X_NET_currentWrapper.load( X_NET_currentData );
};