`

AJAX在线基础(待续一)

阅读更多
1、对与处理服务器的相应信息,xmlhttpRequest提供了两个方法.如下:
   Xml.responseText:作为字符串进行返回,使用alert()会发现处理的是返回信息的String
   Xml.responseXML:做为XML返回,使用alert()会发现是一个Object对象。
2、用reponseText接收的字符串大部门的时候来和innerHTML方法结合使用,得到比较动态的页面内容,比如在页面产生事件,然后响应请求,服务器组织HTML返回,在调用HTML的innserHTML设置DIV等的HTML值。
3、当使用responseXML的时候,使用它,响应信息必须设置为response.setContentType(“text/xml”)需要使用DOM的方式结合JS来处理服务器响应的结果
DOM是一种标准,浏览器都会对它进行支持,通过结合JS很好的处理
一些DOM的方法和属性:
childNodes 返回当前元素的所有子元素数组
firstChild 返回当前元素的第一个下级子元素
lastChild 返回当前元素的最后一个下级子元素
nextsibling 返回当前元素的后一个元素
nodevalue 当前元素的读写属性
parentnode 父元素
previousSibling 前一个元素
下面是一些方法
getElementById(“id”) 获取指定ID元素
getElementsByTagName(“name”) 获取指定名称数组
hasChildNodes() 是否还有子元素
getAttribute(“name”); 返回元素的属性值
一个例子:
如下客户端发送请求服务器端的school.xml并且alert出所有的班级信息
如下:
<%@ page language="java" pageEncoding="utf-8"%>
<html>
<head>
<script type="text/javascript">
         function getWEBXML() {
            var xmlhttp = createXML();
            xmlhttp.onreadystatechange = function(){
            if (xmlhttp.readyState == 4) {//readystate 为4即数据传输结束
    if(xmlhttp.status == 200){
showAllClass(xmlhttp.responseXML);   
}
   }
            }
            xmlhttp.open("GET", "school.xml", true);
            xmlhttp.send(null);
         }
        
        function createXML() {
            var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
        return xmlhttp;
         }
        
         function showAllClass(xmldoc) {
           var school = xmldoc.getElementsByTagName("school")[0];
           var childs = school.childNodes;
           for(var i=0; i<childs.length;i++) {
              var garde = childs[i];
              for(var j=0; j<garde.childNodes.length;j++) {
                 var cla = garde.childNodes[j];
                 alert(cla.childNodes[0].nodeValue);
              }
           }
         }
     </script>
</head>
<body>
<input type="button" id="id" onclick="getWEBXML()" />
</body>
</html>
School.xml:
<?xml version="1.0" encoding="UTF-8"?>
<school>
   <computer>
      <class>计算机网络班</class>
      <class>软件工程班</class>
      <class>计算机科学与技术班</class>
   </computer>
   <electrice>
      <class>电子商务班</class>
      <class>硬电工程班</class>
   </electrice>
   <english>
      <class>商务英语</class>
      <class>贸易英武</class>
   </english>
</school>
注释:DOM把每个节点都当作为一个数组,需要访问最低节点的时候都要使用childNodes[0]来访问使用。在类似HTML的标签中,是吧内容都当成是当前节点的第一个节点
如:node.childNodes[0].firstChild.nodeValue;
4、使用DOM能动态的添加文档内容和删除内容
它的实现部分方法如下:
document.createElement(“tagname”) 创建指定名称的节点
Document.createTextNode(text) 创建包含静态文本的节点,即时文本节点
<element>.appendChild(childNode) 给指定节点添加子节点
<element>.setAttribute(“name”,”value”)/getAttribute(“name)” 设置和获取指定节点的name属性的值
如<div class=”test” />就是获取test
<element>.insertBefore(newNode,targetNode) 在targetNode节点前插入newNode
<element>.removeAttribute(name) 删除节点指定名称属性
<element>.removeChild(nodw) 删除指定的子节点
<element>.replaceChile(newNode,oldNode) 用新的子节点替换新的子节点
<element>.hasChildNodes() 是否还有子元素


使用上面的方法能灵活的生成各种动态的内容,例子如下:
主要是使用AJAX请求服务器的User.xml,然后解析结果放到页面上,代码如下:
<%@ page language="java" pageEncoding="utf-8"%>
<html>
<head>
<script type="text/javascript">
         function getWEBXML() {
            var xmlhttp = createXML();
            xmlhttp.onreadystatechange = function(){
            if (xmlhttp.readyState == 4) {//readystate 为4即数据传输结束
    if(xmlhttp.status == 200){
clearTable();  
parseUsers(xmlhttp.responseXML); //解析结果
}
   }
            }
            xmlhttp.open("GET", "User.xml", true);
            xmlhttp.send(null);
         }
        
        function createXML() {
            var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
} else if (window.ActiveXObject) {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
        return xmlhttp;
         }
        
        function clearTable() {
            //解析之前清除原有的内容
        var ubody = document.getElementById("ubody");
        while(ubody.childNodes.length >0) {
            ubody.removeChild(ubody.childNodes[0]);
        }
        }
       
        function parseUsers(uxml) {
           var uresult = uxml;
           var users = uresult.getElementsByTagName("User");
           var username = "";
           var email = "";
           var address = "";
           //循环获取每个USER的内容,然后调用addOneRow函数创建行
           for(var i=0; i<users.length; i++) {
               user = users[i];
               username = user.getElementsByTagName("username")[0].firstChild.nodeValue;
               email = user.getElementsByTagName("email")[0].firstChild.nodeValue;
               address = user.getElementsByTagName("address")[0].firstChild.nodeValue;
               addOneRow(username,email,address);
           }
          
           document.getElementById("utable").setAttribute("border","1");
        }
        //先创建<tr>节点,之后在依次创建三个td设置为<tr>的子节点
        function addOneRow(username,email,address) {
        var row = document.createElement("<tr>");
        var td = createTd(username);
        row.appendChild(td);
        td = createTd(email);
        row.appendChild(td);
        td = createTd(address);
        row.appendChild(td);
        document.getElementById("ubody").appendChild(row);
        }
        //创建td元素,在给td创建一个文本子元素,返回td元素
        function createTd(content) {
           var td = document.createElement("<td>");
           var text = document.createTextNode(content);
           td.appendChild(text);
           return td;
        }
        
        
     </script>
</head>
<body>
<input type="button" id="id" onclick="getWEBXML()" value="生成表格"/>
<table align="left" id="utable" border="0">
   <tbody id="ubody">
  
   </tbody>
</table>
</body>
</html>

User.xml内容如下
<?xml version="1.0" encoding="UTF-8"?>
<school>
   <User>
      <username>王建</username>
      <email>4490843@qq.com</email>
      <address>江西南昌</address>
   </User>
   <User>
      <username>程招</username>
      <email>chengzhoa@126.com</email>
      <address>上海浦东</address>
   </User>
   <User>
      <username>刘振</username>
      <email>liuzheng@sina.com</email>
      <address>深圳福田</address>
   </User>
</school>
运行效果:点击生成表格按钮结果显示如下:

5、很多时候可能会使用发送xml作为请求,这时候发送的时候同样利用JS和document组织成xml各式的数据,然后网服务器端发送,服务器端可以使用各种解析xml的工具去解析发送过来的xml文件数据。如dom4j,jdom,jaxp等技术都能响应的解析,实际的实现和document解析xml文件的方式类似。
6、json:使用xml来发送复杂的数据有些冗余等,所以很多时候更简易使用json的方式发送数据,然后服务器同时使用json的方式解析数据,json对客户端把数据对象转换成json字符串的方式做了封装,在服务器端同时也对解析做了封装,只需要得到它的类库就可以方便的使用这个技术来实现需求
一个客户端的JSON把USER对象解析成字符串,进行发送到服务器,JSON对象是键值对的数组方式一般
Function User(username,password,email,address) {
This.username = username;
This.password = password;
This.email. = email;
This.address = address;
}

Function userJSON() {
   Var user = new User(“a”,”b”,”c”,”d’);
   Userstring = JSON.stringify(user);//使用JSON把对象解析
}
服务器端的解析
BufferedReader br = request.getReader();
StringBuffer sb = new StringBuffer();
String s = null;
While((s = br.readLine())!=null) {
  Sb.append(s);
}

JSONObject jsobject = new JSONObject(sb.tostring);
String username = jsobject.getString(“username”);
String password = jsobject.getString(“password”);
………..方式
分享到:
评论

相关推荐

    ajax 基础教程源代码

    ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础教程源代码ajax 基础...

    精通Ajax_基础概念_核心技术与典型案例

    精通Ajax——基础概念、核心技术与典型案例 人民邮电出版社 本书主要介绍Ajax技术的组成元素,涉及JavaScript、CSS、DOM、XMLHTTP和XML等内容,其中详细介绍了JavaScript客户端语言,它是Ajax技术的核心组成,是...

    ajax 基础教程

    ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax 基础教程ajax ...

    精通Ajax 基础概念.核心技术与典型案例

    ## **一、Ajax基础概念** 1. **异步通信**:Ajax的核心是JavaScript对象XMLHttpRequest,它允许在后台与服务器进行通信,不阻塞用户对页面的操作。 2. **局部刷新**:Ajax可以只更新网页的部分区域,而不是整个页面...

    Ajax基础教程(亚马逊计算机榜首图书,国内第1本Ajax图书) [第一部分 共两部分]

    Ajax技术可以提供高度交互的Web应用,给予用户更丰富的页面浏览体验。本书重点介绍Ajax及相关的工具和技术,主要内容包括...这一过程将乐趣无穷,我们衷心地希望,有一天能看到你开发的基于Ajax的一流应用!

    AJAX最基础的知识

    ajaxjichu,ajax基础1

    ajax在线聊天室

    "Ajax在线聊天室"就是一个典型的应用场景,它允许用户实时发送和接收消息,而无需等待页面刷新。这种实时交互性是通过Ajax技术实现的,它通过JavaScript向服务器发送异步请求,获取新的聊天内容,并在页面的特定区域...

    Ajax基础入门简介

    **Ajax基础入门简介** Ajax(Asynchronous JavaScript and XML)是一种用于创建快速、动态网页的技术,它使得网页可以在不重新加载整个页面的情况下与服务器交换数据并更新部分网页内容。这一技术的出现极大地提升...

    ajax 基础

    **Ajax(Asynchronous JavaScript and XML)基础** Ajax 是一种在无需刷新整个网页的情况下,能够更新部分网页的技术。它通过在后台与服务器进行少量数据交换,使网页实现异步更新。这种技术的核心是JavaScript,...

    AJax与PHP基础教程.

    **第一章 - Ajax基础** 在这一章中,你将学习到Ajax的基本概念,包括异步通信的重要性、XMLHttpRequest对象的使用以及如何创建简单的Ajax请求。了解如何通过JavaScript与服务器进行交互,实现页面内容的动态加载,...

    14ajax课程_AJAX基础_

    **AJAX基础详解** 在现代Web开发中,AJAX(Asynchronous JavaScript and XML)是一种核心技术,它使得网页能够实现异步数据交换,无需刷新整个页面即可更新部分内容。本教程将深入探讨AJAX的基础知识,帮助你理解其...

    AJAX基础教程.pdf

    ### AJAX基础教程知识点总结 #### 一、AJAX概述 - **定义**:Asynchronous JavaScript and XML(异步JavaScript和XML)是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术。 - **目的**:提高Web应用的...

    Ajax基础教程(扫描版)

    这一过程将乐趣无穷,我们衷心地希望,有一天能看到你开发的基于ajax的一流应用!... 目录 译者序. 前言 致谢 关于技术审校 第1章 ajax简介 1 1.1 web应用简史 1 1.2 浏览器历史 2 1.3 web应用的发展历程 3 ...

    ajax基础知识总结

    学习ajax基础知识,让自己的前端技术更上一层,学会与后台交互

    《Ajax与PHP基础教程》第二章.

    对于Ajax有一个误解:能够实现这么酷的功能,JavaScript代码肯定是很难实现和维护...注意,Ajax是一 种JavaScript工具,因此当尝试理解Ajax类型的应用程序时,对JavaScript基础知识的掌握就尤为 重要.让我们从基础知识开始.

    《Ajax与PHP基础教程》

    ### 第一章:Ajax基础 Ajax的核心技术包括XMLHttpRequest对象、JavaScript、DOM(Document Object Model)以及CSS。XMLHttpRequest是Ajax的基础,用于在后台与服务器进行通信。JavaScript处理用户的交互和动态更新...

    《Ajax基础教程》一书所附源代码

    《Ajax基础教程》一书所附源代码《Ajax基础教程》一书所附源代码

    Ajax中文基础教程1

    Ajax中文基础教程Ajax中文基础教程Ajax中文基础教程Ajax中文基础教程Ajax中文基础教程Ajax中文基础教程Ajax中文基础教程

    Ajax.基础教程。Ajax初学者必备教材。

    Ajax.基础教程。包含Ajax的基本知识,是Ajax初学者必备的教材。

    AJAX基础教程

    XMLHttpRequest是AJAX的基础,它是浏览器提供的一个内置对象,用于在后台与服务器进行通信。创建XMLHttpRequest对象的代码如下: ```javascript var xhr = new XMLHttpRequest(); ``` 然后,通过open()方法设置请求...

Global site tag (gtag.js) - Google Analytics