论坛首页 AJAX版 AJAX

如何给一个异步调用的结果调用传递对象参数?

浏览 356 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
时间:2007-12-17
一般来说为了复用xmlhttp异步调用代码都会进行简单的封装,比如:

function xmlhttp_request( url, onready ) {
var xhr= new XMLHttpRequest();
xhr.onreadystatechange = function() {
	if ( xhr.readyState == 4 ) {
		eval( onready );
	}
};
xhr.open( "GET", url, true );
xhr.send( null );
}


onready是一个约定好接受XMLHttpRequest或者XMLHttpRequest.responseXML对象作为参数的函数名字符串,比如:

function print( responseXML ) {
	document.write( responseXML );
}
xmlhttp_request( "http://www.sina.com.cn", "print(xhr.responseXML)" );


这样如果在print回调函数中需要附带几个其他参数,如果只是简单的string或者int,也可以直接放在onready里,比如:

function print2( output_id, responseXML ) {
	document.getElementById(output_id).innerHTML = responseXML;
}
xmlhttp_request( "http://www.sina.com.cn", "print2('id1',xhr.responseXML)" );
xmlhttp_request( "http://news.sina.com.cn", "print2('id2',xhr.responseXML)" );


问题是如果需要给print回调函数转递一个对象参数该如果做?比如我期望有这么一个回调函数:

function print3( Obj, responseXML ) {
	Obj.innerHTML = responseXML;
}


xmlhttp_request()里应该怎么实现传递一个对象给回调函数?
有点啰嗦,希望我已经表达清楚了。
   
时间:2007-12-17
补习了一下closure知识,自问自答:

function xmlhttp_request( url, onready ) {
var xhr= new XMLHttpRequest();
xhr.onreadystatechange = function() {
if ( xhr.readyState == 4 ) {
onready( xhr.responseXML );
}
};
xhr.open( "GET", url, true );
xhr.send( null );
}

function print3( Obj, responseXML ) {
Obj.innerHTML = responseXML;
}

var obj = document.getElementById( "id" );
xmlhttp_request( "http://www.sina.com.cn", function(xml){ print3(obj,xml); } );
   
0 请登录后投票
论坛首页 AJAX版 AJAX

跳转论坛: