//{+netform"<form>によるGETとPOST"(動的に生成したフォームによるGETとPOST。)[+net,+ninjaiframe]\r
\r
-var X_FormSender_errorTimerID, X_FormSender_onloadCount = 0;\r
+var X_FormSender_errorTimerID,\r
+ X_FormSender_isLeave,\r
+ X_FormSender_onloadCount = 0;\r
\r
X_TEMP.X_FormSender_init = function(){\r
X_FormSender = X_Class_override( X_NinjaIframe(), X_TEMP.X_FormSender_params );\r
\r
/*\r
* form 構築時に "><script> といった文字列の挿入を禁止するために " を エスケープする\r
- * TODO 改行文字を消す\r
+ * TODO 改行文字を消す escape?\r
*/\r
function X_FormSender_escapeQuote( str ){\r
\r
};\r
\r
X_TEMP.X_FormSender_params = {\r
- \r
+\r
_busy : false,\r
_canceled : false,\r
\r
- timeout : 1000,\r
- isJump : false, // ページを離脱するか?\r
- \r
load : function( option ){\r
//createURL\r
- var params = option[ 'params' ] || {},\r
- target = option[ 'target' ],\r
+ var params = option[ 'params' ] || {},\r
+ target = option[ 'target' ],\r
+ timeout = option[ 'timeout' ],\r
+ // http://search.web-sun.com/zatu/charset.html\r
+ // charset = option[ 'charset' ],\r
html, k;\r
\r
target = target === '_self' ? '_parent' : target === '_blank' ? '_self' : target || '_self',\r
html = [\r
+ // <meta http-equiv="Content-Type" content="text/html; charset=euc-jp">\r
'<form method="', X_FormSender_escapeQuote( option[ 'method' ] || 'GET' ), \r
'" action="', X_FormSender_escapeQuote( option[ 'url' ] || '' ), \r
'" target="', X_FormSender_escapeQuote( target ),\r
'">' ];\r
\r
- if( target === '_top' || target === '_parent' ) X_FormSender.isJump = true;\r
- if( 0 <= option[ 'timeout' ] ) X_FormSender.timeout = option[ 'timeout' ];\r
+ X_FormSender_isLeave = target === '_top' || target === '_parent';\r
+\r
\r
for( k in params ){\r
// TODO 使用すべきでない name\r
};\r
\r
html.push( '</form><script>document.forms[0].submit();</script>' );\r
- \r
+\r
X_FormSender\r
[ 'refresh' ]( html.join( '' ) )\r
[ 'listen' ]( [ 'ninjaload', 'ninjaerror' ], X_FormSender_iframeListener );\r
- \r
+ \r
+ if( 0 < timeout ){\r
+ X_FormSender_errorTimerID = X_FormSender[ 'asyncDispatch' ]( timeout, { type : X_EVENT_ERROR, 'timeout' : true } );\r
+ };\r
+ \r
X_FormSender._busy = true;\r
},\r
\r
\r
reset : function(){\r
X_FormSender._busy = X_FormSender._canceled = false;\r
- X_FormSender[ 'unlisten' ]( [ 'ninjaload', 'ninjaerror' ], X_FormSender_iframeListener );\r
- X_FormSender[ 'refresh' ]( '' );\r
+ X_FormSender\r
+ [ 'unlisten' ]( [ 'ninjaload', 'ninjaerror' ], X_FormSender_iframeListener )\r
+ [ 'refresh' ]( '' );\r
X_FormSender_errorTimerID && X_Timer_remove( X_FormSender_errorTimerID );\r
X_FormSender_errorTimerID = X_FormSender_onloadCount = 0;\r
}\r
\r
switch( e.type ){\r
case 'ninjaload' :\r
- if( X_FormSender.isJump ){\r
+ if( X_FormSender_isLeave ){\r
return;\r
};\r
\r
if( ++X_FormSender_onloadCount === 1 ){\r
- X_FormSender_errorTimerID = X_FormSender[ 'asyncDispatch' ]( X_FormSender.timeout, { type : X_EVENT_ERROR, 'timeout' : true } );\r
-\r
- // TODO レスポンスの html にアクセスしたい場合\r
- // TODO samedomain or xiframe-sender\r
- \r
idoc = this[ '_rawObject' ].contentDocument || this._iwin.document,\r
- \r
+\r
X_FormSender[ 'asyncDispatch' ]( { type : X_EVENT_SUCCESS, response : idoc && idoc.body ? idoc.body.innerHTML : '' } );\r
};\r
break;\r