AJAX
中從遠(yuǎn)程
URL
動(dòng)態(tài)取得
xml
的方法
需求:
在JavaScript中動(dòng)態(tài)的從一個(gè)URL取得xml文件,然后,動(dòng)態(tài)的更新數(shù)據(jù)。
問題的難點(diǎn):
Javascript
不能實(shí)現(xiàn)從一個(gè)URL讀取xml數(shù)據(jù)。
使用動(dòng)態(tài)的參數(shù)的時(shí)候,如后使用GET方法,那么,參數(shù)有可能太長(zhǎng)。
解決的辦法:
這個(gè)辦法使用AJAX可以實(shí)現(xiàn)。
因?yàn)?span lang="EN-US">AJAX可以從URL來動(dòng)態(tài)的讀取xml數(shù)據(jù)。
同時(shí)也可以很方便的分析和處理XML數(shù)據(jù)。
問題的關(guān)鍵點(diǎn):
AJAX
不能從一個(gè)不同Context的服務(wù)器上來讀入XML,所以要想讀取xml數(shù)據(jù)的話,那就一定要在同一個(gè)Context中,如果不在,那么就使用一個(gè)Servlet來實(shí)現(xiàn)從一個(gè)遠(yuǎn)程的URL上讀取數(shù)據(jù),然后可以通過調(diào)用此Servlet來取得遠(yuǎn)程的數(shù)據(jù)。
我的實(shí)現(xiàn):
?
?
寫一個(gè)Servlet來實(shí)現(xiàn)從遠(yuǎn)程url上讀取xml數(shù)據(jù),這個(gè)url參數(shù)是用戶根據(jù)自己的需要傳遞的。
??? 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來調(diào)用servlet取得此數(shù)據(jù)
??????
<
script
type
=
"text/javascript"
>
?
??????????
var
xmlHttp=
new
ActiveXObject(
"Msxml2.XMLHTTP"
);
??????????
//alert(xmlHttp);???
??????????
這個(gè)
url
是你的
servlet
的
uri,
只能是在同一個(gè)
context
內(nèi)的,否則不能調(diào)用。所以,如果需要跨服務(wù)器的話,或者需要跨
context
的話,就需要使用在本
context
上使用一個(gè)
servlet
做跳轉(zhuǎn)。
??????????
var
sevUrl =
"../servlet/PullXmlData?url="
;
??????????
?
??????????
下面的那個(gè)
url
參數(shù)其實(shí)是我們的遠(yuǎn)程的
xml
的數(shù)據(jù)的
url,
因?yàn)樵趨?shù)里面有等號(hào),所以在調(diào)用之前就要通過一個(gè)處理和轉(zhuǎn)換,這一步也是必須的。
??????????
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,
所以也只能想到這個(gè)解決方案,如果大家有好的解決辦法,還請(qǐng)多多指教。
|----------------------------------------------------------------------------------------|
版權(quán)聲明 版權(quán)所有 @zhyiwww
引用請(qǐng)注明來源 http://www.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2007-05-14 16:28
zhyiwww 閱讀(3240)
評(píng)論(3) 編輯 收藏 所屬分類:
javascript