これは一種のコード設計の問題です。
もともと私はこのようにAjaxを使用しました:
オリジナルのAjaxコール
Ajax.repeatUse( ajaxSerialize( this.form_element ) + '&ajax_type=ControlSignIn', ajaxTypeRespond, this.response_element );
ここajaxTypeRespond
で、は成功したajax呼び出しのコールバック関数です。
問題は、必要なパラメーターをコールバック関数に渡さなければならないことです。この場合はのみthis.response_element
です。これは、実際にはajax呼び出しでは使用されず、単にコールバック関数の呼び出しに渡されるため、厄介です。
また、機能が成長するにつれて、このパラメータリストは成長し続けます。
私がやりたいのは、responseTextを返し、必要なパラメーターをこのような新しい関数呼び出しに結合することです。
Ajaxコールが欲しかった
var server_response_text = AjaxNew.use( ajaxSerialize( this.form_element ) + '&ajax_type=ControlSignIn' );
ajaxType( server_response_text, this.response_element, 'respond' );
問題は、server_response_textが同期関数(Ajax)ではないために定義されていないことです。設定されるまで待ってから電話する方法はありますかajaxType
IE 10230エラーのループがあります。この質問には関係ありませんが、例では削除するのが難しすぎることがわかりました。以下は、ループを使用したAjax関数です。
Ajax関数
var Ajax = function()
{
};
Ajax.create = function()
{
var request;
try
{
request = new XMLHttpRequest();
}
catch( error )
{
try
{
request = new ActiveXObject( "Msxml2.XMLHTTP" );
}
catch( error )
{
try
{
request = new ActiveXObject( "Microsoft.XMLHTTP" );
}
catch( error )
{
request = false;
}
}
}
return request;
};
Ajax.use = function( param, ajax_func, element )
{
var object = Ajax.create();
object.open( "POST", CONSTANT.GATEWAY, true );
object.setRequestHeader( "Content-type", "application/x-www-form-urlencoded" );
object.setRequestHeader( "Content-length", param.length );
object.setRequestHeader( "Connection", "close" );
object.onreadystatechange = function()
{
if( this.readyState === 4 )
{
if( this.status === 200 )
{
ajax_func( this.responseText, element );
return true;
}
else
{
Ajax.repeatUse( ajax_func, element );
return false;
}
}
};
object.send( param );
return true;
};
Ajax.repeatUse = function( param, ajax_func, element )
{
var state = false,
count = 1;
while( state === false && count <= 5 )
{
state = Ajax.use( param, ajax_func, element );
if( count !== 1 )
{
alert( 'Ajax Object Use Failed ');
}
count++;
}
return state;
};