西西河

主题:【原创】AJAX在西西河的一个应用简析 -- 铁手

共:💬16 🌺7 新:
全看分页树展 · 主题
家园 【原创】AJAX在西西河的一个应用简析

Asynchronous JavaScript and XML ==> AJAX

关于AJAX的历史和一些应用以及实现机理,可以在GOOGLE里很容易的查找到,这里就不多说。只是简单的说明一下它目前在西西河的第一个应用,以及在使用过程中所碰到的问题,并请熟悉的朋友讨论指点一下。

AJAX的机理,说起来很简单,就是在 JAVACRIPT 中直接和服务器取得联系,把相关内容拿回到客户端,然后把零件一个个拆下来,再分别放到当前页面中合适的地方去。

最核心的部分,就是在JAVASCRIPT中实现静悄悄获取页面内容的的功能模块。

这个功能,在非IE的浏览器中很容易实现,因为这些浏览器里都内置这个模块。用以下的语句,可以得到这个功能模块。

if (window.XMLHttpRequest) {

zHTTP_Req = new XMLHttpRequest();

if (zHTTP_Req.overrideMimeType) {

zHTTP_Req.overrideMimeType("text/xml");

}

}

如果是IE浏览器,则需要ActiveXObject的支持,可以用以下语句得到

if (window.ActiveXObject){

try{

zHTTP_Req = new ActiveXObject("Microsoft.XMLHTTP");

}catch(e){

try{

zHTTP_Req = new ActiveXObject("Msxml2.XMLHTTP");

} catch (e) {}

}

}

在得到这个打开后门偷偷交流的功能模块后(在这里是 zHTTP_Req),需要做的事情就是告诉这个模块在什么情况下做什么事情。这个是通过事件驱动来实现,具体的说,就是给这个模块的 onreadystatechange 事件定义一个函数。

function IfYouClickMeIWillKickYouBack{ // 用来对某个BUTTON点击做反应的函数

zHTTP_Req.onreadystatechange = function(){

if (zHTTP_Req.readyState == 4) {

if (zHTTP_Req.status == 200) {

var zlTmpV = zHTTP_Req.responseXML.getElementsByTagName("UPInfo")[0].childNodes[0].nodeValue; //XML的格式

。。。

。。

//zlDobj.innerHTML = zHTTP_Req.responseText; //文本方式得到内容

}

}

}

zHTTP_Req.open("GET", url, true); //我要看到某个页面的内容。

zHTTP_Req.send(null);

}

上面这段里,在提出要得到某个页面的内容的请求后,这个功能模块不断检测请求是否得到响应,内容是否正常返回。

正常返回后,可以有两种方式来得到所请求的内容。如果是简单的文本,可以用 zHTTP_Req.responseText ,如果是XML格式的,则需要相应的处理,来得到分类的内容。

西西河目前的一个简单AJAX应用,是实现在论坛首页最下面的【发贴信息】这个链接里。FIREFOX,SAFARI里面都没有任何问题,但是在IE里面,有时候可以有时候不可以,邪门的很。

还有一个问题,我原本是想用简单的文本方式,也就是在所请求的URL里,把内容都格式好以后(包括HTML 标签符号)输出,希望能够使用 responseText 来直接放到页面某个位置,结果所有中文都成为????的形式,而英文、数字等则没有显示问题。

后来不得以,只能使用 responseXML 来实现。只是,对XML也不是很熟悉。河里的XML FEED,也是用了尽可能简单的方式。

如果有人能够解决 responseText 中文内容乱码的问题的话,事情就会简单很多,西西河里很多地方也可以应用一下。

关键词(Tags): #ajax#乱码#xml元宝推荐:Highway,
全看分页树展 · 主题


有趣有益,互惠互利;开阔视野,博采众长。
虚拟的网络,真实的人。天南地北客,相逢皆朋友

Copyright © cchere 西西河