六狼论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博账号登陆

只需一步,快速开始

搜索
查看: 30|回复: 0

ajax学习笔记(三)

[复制链接]

升级  3.67%

59

主题

59

主题

59

主题

举人

Rank: 3Rank: 3

积分
211
 楼主| 发表于 2013-1-23 02:19:41 | 显示全部楼层 |阅读模式
ajax在服务器端处理XML数据

        首先需要在服务器端返回xml格式文本数据,具体方法可以采用字符串拼接的方式(严格格式要求),但最好采用dom4j框架,感觉最好在vo对象中添加toXMLString方法返回该vo对象xml格式字符串。在服务器端需要设置response.setContentType("text/xml;charset=utf-8");(如果不设置在Firefox中正常IE中会出现异常),在JavaScript中调用XMLHttprequest的responseXML属性返回xml对象。这点处理上firefox和iE又有所不同,firefox不能接受responseXML 必须对responseText进行XML格式化,详见代码部分,然后使用dom中的方法获取xml的节点,再取得具体文本内容。(代码见下)

    

      缓存问题

      在IE中如果请求地址相同,IE会调用缓存内容,如果不希望这种结果,可以再调用地址中加入时间戳,使得每次调用地址不同。

//给url地址增加时间戳,骗过浏览器,不读取缓存
function convertURL(url) {
    //获取时间戳
    var timstamp = (new Date()).valueOf();
    //将时间戳信息拼接到url上
    //url = "AJAXServer"
    if (url.indexOf("?") >= 0) {
        url = url + "&t=" + timstamp;
    } else {
        url = url + "?t=" + timstamp;
    }
    return url;
}

     中文乱码问题

    方法1,页面端发出的数据作一次encodeURI,服务器段使用new String(old.getBytes("iso8859-1"),"UTF-8");


    方法2,页面端发出的数据作两次encodeURI,服务器段使用URLDecoder.decode(old,"UTF-8")

      AJAX应用的五部归纳

     1、创建XMLHttpRequest对象

     2、设置回调函数

     3、使用open方法与服务器建立连接

     4、向服务器端发送数据

     5、在回调函数中针对不同响应状态进行处理并接受服务器端返回数据

              if(window.ActiveXObject){                 var domObj=xmlhttp.responseXML;            }else if(window.XMLHttpRequest){                 var parser = new DOMParser();                 var domObj= parser.parseFromString(xmlhttp.responseText, "text/xml");            }            if (domObj) {                //dom中利用getElementsByTagName可以根据标签名来获取元素节点,返回的是一个数组                var messageNodes = domObj.getElementsByTagName("message");                if (messageNodes.length > 0) {                    //获取message节点中的文本内容                    //message标签中的文本在dom中是message标签所对应的元素节点的字节点,firstChild可以获取到当前节点的第一个子节点                    //通过以下方式就可以获取到文本内容所对应的节点                    var textNode = messageNodes[0].firstChild;                    //对于文本节点来说,可以通过nodeValue的方式返回文本节点的文本内容                    var responseMessage = textNode.nodeValue;                    //将数据显示在页面上                    //通过dom的方式找到div标签所对应的元素节点                    var divNode = document.getElementById("result");                    //设置元素节点中的html内容                    divNode.innerHTML = responseMessage;                } else {                    alert("XML数据格式错误,原始文本内容为:" + xmlhttp.responseText);                }            } else {                alert("XML数据格式错误,原始文本内容为:" + xmlhttp.responseText);            }
 
您需要登录后才可以回帖 登录 | 立即注册 新浪微博账号登陆

本版积分规则

快速回复 返回顶部 返回列表