这是一个代码设计问题。
最初我是这样使用 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;
};