OSDN Git Service

Version 0.6.158, fix X.Net.JSONP.
[pettanr/clientJs.git] / 0.6.x / js / 06_net / 00_XNet.js
index 55f0496..fdc66aa 100644 (file)
@@ -31,6 +31,7 @@
  * <h4>XHR 用プロパティ</h4>\r
  * <dl>\r
  * <dt>method<dd>'GET', 'POST' 未指定かつ postdata を設定している場合、'POST' になる。\r
+ * <dt>params<dd>url パラメータを object で渡すことが出来る。\r
  * <dt>postdata<dd>string, object の場合は X.String.serialize される。\r
  * <dt>async<dd>boolean\r
  * <dt>username<dd>BASIC 認証\r
  * <dt>canUse<dd>未実装。gadget proxy, YQL, YPipes 等のマッシュアップの許可。現在は test : 'gadget' としている\r
  * </dl>\r
  * \r
+ * <h4>JSONP 用プロパティ</h4>\r
+ * <dl>\r
+ * <dt>params<dd>url パラメータを object で渡すことが出来る。\r
+ * <dt>callbackName<dd>callback(json) コールバック名が固定されている際に指定。または &callback=hoge 以外の名前でコールバックを指定する場合に params と callbackName に書いておく。url パラメータに callback が無く、callbackName もない場合、フレームワーク内で自動で設定される\r
+ * <dt>charset<dd>ページと異なるjsonpを読み込む場合に指定 'EUC-JP', 'Shift-JIS' 等 script タグの charset に入る。https://code.google.com/p/ajaxzip3/issues/detail?id=5\r
+ * <dt>useFireWall<dd>異なるドメインに jsonp を読み込んだ後、xdomain iframe 通信を使ってデータを受け取る。不正なコードの実行を防ぐことが出来る、未実装\r
+ * </dl>\r
+ * \r
  * @alias X.Net\r
  * @class 各種ネットワーク機能をラップしインターフェイスを共通化する。\r
  * @constructs Net\r
  *             .listen( X.Event.PROGRESS )\r
  *             .listenOnce( [ X.Event.SUCCESS, X.Event.ERROR, X.Event.TIMEOUT, X.Event.CANCELED ] );\r
  * \r
+ * // XHR - GET \r
+ * var net = X.Net( urlString );\r
+ * \r
  * // XHR - POST \r
  * var net = X.Net( { xhr : urlString, postdata : myData } );\r
  * \r
  * // JSONP\r
- * var net = X.Net( { jsonp : urlString, staticCallbackName : callbackName, useXDomainWall : false } );\r
+ * var net = X.Net( { jsonp : urlString, params : params, callbackName : callbackName, charset : charset, useFireWall : false } );\r
  * \r
  * // Form\r
  * var net = X.Net( { form : urlString, method : 'POST', target : '_self', params : {} } ); // _self, _parent, _top の場合、ページから離脱する\r
@@ -77,53 +89,35 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ](
                        'netVersion' : 0,\r
                        \r
                        'Constructor' : function( urlOrObject, opt_options ){\r
-                               var v, opt, url, type, auth;\r
+                               var opt, url, type, auth;\r
                                \r
                                if( X_Type_isObject( opt = urlOrObject ) ){\r
-                                       if( X_Type_isString( v = opt[ 'xhr' ] ) ){\r
-                                               url  = v;\r
+                                       if( X_Type_isString( url = opt[ 'xhr' ] ) ){\r
                                                type = X_NET_TYPE_XHR;\r
                                        } else\r
-                                       if( X_Type_isString( v = opt[ 'jsonp' ] ) ){\r
-                                               url  = v;\r
+                                       if( X_Type_isString( url = opt[ 'jsonp' ] ) ){\r
                                                type = X_NET_TYPE_JSONP;\r
                                        } else\r
-                                       if( X_Type_isString( v = opt[ 'img' ] || opt[ 'image' ] ) ){\r
-                                               url  = v;\r
+                                       if( X_Type_isString( url = opt[ 'img' ] || opt[ 'image' ] ) ){\r
                                                type = X_NET_TYPE_IMAGE;\r
                                        } else\r
-                                       if( X_Type_isString( v = opt[ 'form' ] ) ){\r
-                                               url  = v;\r
+                                       if( X_Type_isString( url = opt[ 'form' ] ) ){\r
                                                type = X_NET_TYPE_FORM;\r
+                                       //{+dev\r
                                        } else\r
-                                       if( X_Type_isString( v = opt[ 'type' ] ) ){\r
-\r
-                                               switch( v ){\r
-                                                       case 'xhr' :\r
-                                                               type = X_NET_TYPE_XHR;\r
-                                                               break;\r
-                                                       case 'jsonp' :\r
-                                                               type = X_NET_TYPE_JSONP;\r
-                                                               break;\r
-                                                       case 'img' :\r
-                                                       case 'image' :\r
-                                                               type = X_NET_TYPE_IMAGE;\r
-                                                               break;\r
-                                                       case 'from' :\r
-                                                               type = X_NET_TYPE_FORM;\r
-                                                               break;\r
-                                                       default :\r
-                                                               alert( 'X.Net args error' );\r
-                                                               return; \r
-                                               };\r
+                                       if( !( type = X_NET_NAME_TO_ID[ opt[ 'type' ] ] ) ){\r
+                                               alert( 'X.Net args error' );\r
+                                               return;\r
+                                       //}+dev\r
+                                       } else {\r
                                                url = opt[ 'url' ];\r
                                        };\r
-                                       \r
+                                       //{+dev\r
                                        if( !X_Type_isString( url ) ){\r
                                                alert( 'X.Net args error' );\r
                                                return;\r
                                        };\r
-                                       \r
+                                       //}+dev\r
                                } else\r
                                if( X_Type_isString( urlOrObject ) ){\r
                                        url = urlOrObject;\r
@@ -134,12 +128,14 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ](
                                                type = X_NET_TYPE_XHR;\r
                                                opt  = { 'url' : url, 'method' : 'GET' };\r
                                        };\r
-                                       \r
+                               //{+dev \r
                                } else {\r
                                        alert( 'X.Net args error' );\r
                                        return;\r
+                               //}+dev\r
                                };\r
                                \r
+                               // auth の退避\r
                                if( auth = opt[ 'auth' ] ){\r
                                        delete opt[ 'auth' ];\r
                                };\r
@@ -147,12 +143,16 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ](
                                if( auth ){\r
                                        opt[ 'auth' ] = auth; // auth は deep copy されるとまずい\r
                                };\r
-                               opt.netType   = type;\r
-                               opt[ 'url'  ] = url;                            \r
+                               \r
+                               // params を url に追加\r
+                               if( opt[ 'params' ] ){\r
+                                       url = X_URL_create( url, opt[ 'params' ] );\r
+                                       delete opt[ 'params' ];\r
+                               };                              \r
                                \r
                                if( type === X_NET_TYPE_XHR ){\r
                                        opt[ 'method' ] = opt[ 'method' ] || ( opt[ 'postdata' ] ? 'POST' : 'GET' );\r
-                                       \r
+\r
                                        // XDomain 不可 -> Flash, Gears, Silverlight, canUseGadget なら gadget に切替?\r
                                        // PUT DELETE UPDATE 不可 -> Flash, Gears, Silverlight, canUseGadget なら gadget に切替?\r
                                        // xプロトコル な binary のロード -> gadget 内で proxyURL による XHR\r
@@ -161,6 +161,9 @@ X[ 'Net' ] = X_EventDispatcher[ 'inherits' ](
                                        opt[ 'dataType' ] = opt[ 'dataType' ] || X_URL_getEXT( url );\r
                                };\r
                                \r
+                               opt.netType   = type;\r
+                               opt[ 'url'  ] = url;                            \r
+                               \r
                                X_Pair_create( this, opt );\r
                                \r
                                this[ 'listen' ]( [ X_EVENT_BEFORE_KILL_INSTANCE, X_EVENT_KILL_INSTANCE ], X_NET_proxyDispatch );\r
@@ -192,6 +195,14 @@ var X_NET_TYPE_XHR   = 1,
        X_NET_TYPE_FORM  = 3,\r
        X_NET_TYPE_IMAGE = 4,\r
 \r
+       X_NET_NAME_TO_ID = {\r
+               'xhr'   : X_NET_TYPE_XHR,\r
+               'jsonp' : X_NET_TYPE_JSONP,\r
+               'form'  : X_NET_TYPE_FORM,\r
+               'img'   : X_NET_TYPE_IMAGE,\r
+               'image' : X_NET_TYPE_IMAGE\r
+       },\r
+\r
        X_NET_QUEUE_LIST = [],\r
 \r
        X_NET_XHRWrapper,\r