AJAX
中从远程
URL
动态取得
xml
的方法
需求:
在JavaScript中动态的从一个URL取得xml文件,然后,动态的更新数据。
问题的难点:
Javascript
不能实现从一个URL读取xml数据。
使用动态的参数的时候,如后使用GET方法,那么,参数有可能太长。
解决的办法:
这个办法使用AJAX可以实现。
因为AJAX可以从URL来动态的读取xml数据。
同时也可以很方便的分析和处理XML数据。
问题的关键点:
AJAX
不能从一个不同Context的服务器上来读入XML,所以要想读取xml数据的话,那就一定要在同一个Context中,如果不在,那么就使用一个Servlet来实现从一个远程的URL上读取数据,然后可以通过调用此Servlet来取得远程的数据。
我的实现:
写一个Servlet来实现从远程url上读取xml数据,这个url参数是用户根据自己的需要传递的。
public void
doGet(HttpServletRequest request, HttpServletResponse response)
throws
ServletException, IOException {
System.out.println("
-------------- Get ---------------- ");
response.setContentType("text/xml");
response.setCharacterEncoding("UTF-8");
// PrintWriter out = response.getWriter();
//doPost(request,response);
String
url = request.getParameter("url");
//out.println(url);
//String
url = "";
System.out.println("url
is : " + url);
//response.setContentType("text/xml");
PrintWriter
out = response.getWriter();
BufferedReader
reader = new BufferedReader(new InputStreamReader(new URL(url).openStream()));
StringBuffer
xmlData = new StringBuffer();
String
tmp = "";
while((tmp
= reader.readLine())!=null){
log.info(tmp);
out.print(tmp);
//System.out.println("
tmp : " + tmp);
xmlData.append(tmp);
}
try {
out.println(XMLUtil.format(xmlData.toString()));
} catch
(DocumentException e) {
//
TODO Auto-generated catch block
e.printStackTrace();
}
reader.close();
}
在AJAX来调用servlet取得此数据
<
script
type
=
"text/javascript"
>
var
xmlHttp=
new
ActiveXObject(
"Msxml2.XMLHTTP"
);
//alert(xmlHttp);
这个
url
是你的
servlet
的
uri,
只能是在同一个
context
内的,否则不能调用。所以,如果需要跨服务器的话,或者需要跨
context
的话,就需要使用在本
context
上使用一个
servlet
做跳转。
var
sevUrl =
"../servlet/PullXmlData?url="
;
下面的那个
url
参数其实是我们的远程的
xml
的数据的
url,
因为在参数里面有等号,所以在调用之前就要通过一个处理和转换,这一步也是必须的。
var
url = sevUrl + encodeURIComponent(
"http://192.168.1.50:8080/remoteServer /XmlInvoke?aaa=aaa&bbb=bbb
"
);
alert(
"url : "
+ url);
xmlHttp.open(
"post"
, url ,
false
);
xmlHttp.onreadystatechange=
function
()
{
if
(xmlHttp.readyState==4)
{
alert(xmlHttp.responseText);
document.write(xmlHttp.responseText);
}
}
xmlHttp.send();
</
script
>
我也刚接触
Ajax,
所以也只能想到这个解决方案,如果大家有好的解决办法,还请多多指教。
|----------------------------------------------------------------------------------------|
版权声明 版权所有 @zhyiwww
引用请注明来源 http://www.blogjava.net/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2007-05-14 16:28
zhyiwww 阅读(3232)
评论(3) 编辑 收藏 所属分类:
javascript