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.tkk7.com/zhyiwww
|----------------------------------------------------------------------------------------|
posted on 2007-05-14 16:28
zhyiwww 閱讀(3240)
評論(3) 編輯 收藏 所屬分類:
javascript