`

6、请求参数作为XML发送——ajax基础笔记

阅读更多

如果只是使用一个包含 名/值 对的简单查询串,这可能不够健壮,不足以向服务器传递大量复杂的模型变化。更好的解决方案是将模式的变化作为XML发送到服务器。

请求参数作为XML发送

示例:选择框中的选中的项将作为XML发送到服务器

postingXML.html清单:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Sending an XML Request</title>

<script type="text/javascript">

var xmlHttp;

function createXMLHttpRequest() {
    if (window.ActiveXObject) {
        xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
    } 
    else if (window.XMLHttpRequest) {
        xmlHttp = new XMLHttpRequest();
    }
}
//创建XML
function createXML() {
    var xml = "<pets>";
    
    var options = document.getElementById("petTypes").childNodes;
    var option = null;
    //下拉框中所有被选中的项添加到XML文档中
    for(var i = 0; i < options.length; i++) {
        option = options[i];
        if(option.selected) {
            xml = xml + "<type>" + option.value + "</type>";
        }
    }
    xml = xml + "</pets>";
    return xml;
}
//主函数
function sendPetTypes() {
    createXMLHttpRequest();
    
    var xml = createXML();
    //避免读取缓存,加上时间戳
    var url = "PostingXMLExample?timeStamp=" + new Date().getTime();
    //参数以XML形式发送时,以POST方式发送
    xmlHttp.open("POST", url, true);
    xmlHttp.onreadystatechange = handleStateChange;
    //以POST发送时需要设置以下HTTP头
    xmlHttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");    
    xmlHttp.send(xml);
}
//状态改变处理函数
function handleStateChange() {
    if(xmlHttp.readyState == 4) {
        if(xmlHttp.status == 200) {
            parseResults();
        }
    }
}
//回调方式
function parseResults() {
    var responseDiv = document.getElementById("serverResponse");
    if(responseDiv.hasChildNodes()) {
        responseDiv.removeChild(responseDiv.childNodes[0]);
    }
    
    var responseText = document.createTextNode(xmlHttp.responseText);
    responseDiv.appendChild(responseText);
}


</script>
</head>

<body>
  <h1>Select the types of pets in your home:</h1>
  
  <form action="#">
    <select id="petTypes" size="6" multiple="true">
        <option value="cats">Cats</option>
        <option value="dogs">Dogs</option>
        <option value="fish">Fish</option>
        <option value="birds">Birds</option>
        <option value="hamsters">Hamsters</option>
        <option value="rabbits">Rabbits</option>
    </select>
    
    <br/><br/>
    <input type="button" value="Submit Pets" onclick="sendPetTypes();"/>
  </form>

  <h2>Server Response:</h2>

  <div id="serverResponse"></div>

</body>
</html>

 

注:这个例子为什么使用串连接来创建XML,而不是直接创建文档和元素对象呢?遗憾的是,对于从头构建文档对象,目前还没有跨浏览器的技术。IE通过ActiveX对象提供这个功能,Mozilla浏览器则通过本地JavaScript对象来提供,其他浏览器可能根本不支持,也可能通过其他途径来支持这个功能。

PostingXMLExample.java清单:

package ajaxbook.chap3;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class PostingXMLExample extends HttpServlet {
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        
        String xml = readXMLFromRequestBody(request);
        Document xmlDoc = null;
        try {
            xmlDoc = 
                    DocumentBuilderFactory.newInstance().newDocumentBuilder()
                    .parse(new ByteArrayInputStream(xml.getBytes()));
        }
        catch(ParserConfigurationException e) {
            System.out.println("ParserConfigurationException: " + e);
        }
        catch(SAXException e) {
            System.out.println("SAXException: " + e);
        }

        /* Note how the Java implementation of the W3C DOM has the same methods
         * as the JavaScript implementation, such as getElementsByTagName and 
         * getNodeValue.
         */
        NodeList selectedPetTypes = xmlDoc.getElementsByTagName("type");
        String type = null;
        String responseText = "Selected Pets: ";
        for(int i = 0; i < selectedPetTypes.getLength(); i++) {
           type = selectedPetTypes.item(i).getFirstChild().getNodeValue();
           responseText = responseText + " " + type;
        }
        
        response.setContentType("text/xml");
        response.getWriter().print(responseText);
    }
    
    private String readXMLFromRequestBody(HttpServletRequest request){
        StringBuffer xml = new StringBuffer();
        String line = null;
        try {
            BufferedReader reader = request.getReader();
            while((line = reader.readLine()) != null) {
                xml.append(line);
            }
        }
        catch(Exception e) {
            System.out.println("Error reading XML: " + e.toString());
        }
        return xml.toString();
    }
}

运行结果:

 

 

 

  • 大小: 5.6 KB
分享到:
评论

相关推荐

    7、使用JSON向服务器发送数据——ajax基础笔记

    在“使用JSON向服务器发送数据——ajax基础笔记”这个主题中,我们首先会了解如何创建一个XMLHttpRequest对象。在JavaScript中,你可以通过`new XMLHttpRequest()`来实例化一个对象,然后利用它的方法如`open()`、`...

    Ajax中XmlHttpRequest实例笔记

    // 对于POST请求,send参数为要发送的数据 ``` 4. **监听状态变化**:通过onreadystatechange事件处理函数,当xhr.readyState改变时,会触发该事件。 ```javascript xhr.onreadystatechange = function() { if ...

    web开发技术——课程笔记.rar

    AJAX(Asynchronous JavaScript and XML)用于异步加载数据,提升用户体验。 4. 前端框架和库: 在实际开发中,常常会使用到前端框架和库,如React、Vue.js和Angular,它们提供了一套完整的开发工具和组件系统,...

    完善后的在线云笔记系统

    《完善后的在线云笔记系统——基于mybatis、javaee、ajax和json的技术实践》 在线云笔记系统在当今数字化时代中扮演着重要角色,它为用户提供了一种方便、快捷的记录、整理和共享信息的方式。本项目是针对一个已有...

    Extjs复习笔记(十九)-- XML作为tree的数据源

    在本文中,我们将深入探讨ExtJS中的一个关键概念——如何使用XML作为TreePanel的数据源。ExtJS是一个强大的JavaScript库,用于构建复杂的Web应用程序,而TreePanel则是它的一个组件,用于展示层次结构的数据,通常...

    老男孩第20周视频教程笔记

    在“老男孩第20周视频教程笔记”中,我们主要关注的是前端开发的一个关键话题——AJAX(异步JavaScript和XML)。AJAX是一种在不重新加载整个网页的情况下,能够更新部分网页的技术,极大地提升了用户体验。它通过...

    javaweb笔记+狂神+知识总结

    12. **Ajax**:Asynchronous JavaScript and XML,用于创建异步Web应用,通过后台与服务器交换数据并局部更新页面,提升了用户体验。 13. **JSON(JavaScript Object Notation)**:JSON是轻量级的数据交换格式,常...

    达内云笔记项目完整代码+注释

    本项目——“达内云笔记”,是一个基于SSM(Spring、SpringMVC、MyBatis)框架构建的云笔记应用,旨在帮助开发者理解和掌握企业级Web应用的开发流程和技术栈。该项目不仅提供了完整的源代码,还附带了详尽的注释,为...

    SSH应用sqlserver和Oracle和Ajax和java基础

    在本压缩包中,你将找到关于SSH框架在实际应用中与SQL Server、Oracle数据库以及Ajax和Java基础知识的详细笔记。 1. SSH框架: - Struts:作为MVC框架的一部分,负责处理HTTP请求,并将控制权交给相应的业务逻辑...

    servlet学习笔记

    【Servlet学习笔记】是关于Java Web开发中一个关键组件——Servlet的详细教程,它主要讲述了前端与后端如何协同工作,实现数据的交互和页面的动态呈现。在Web应用程序开发中,Servlet扮演着服务器端程序的角色,处理...

    SSH学习笔记3 SSH学习笔记3

    SSH学习笔记3主要聚焦于三个Java企业级开发框架——STRUTS、SPRING和HIBERNATE的集成与应用。这三个框架是Java后端开发中非常重要的组件,它们各自负责不同的层面,共同构建了一个强大的MVC(Model-View-Controller...

    servlet和jsp学习笔记

    6. **AJAX与JSP**:AJAX(Asynchronous JavaScript and XML)可以与JSP结合使用,实现页面的异步更新,提高用户体验。 在实际开发中,Servlet和JSP通常配合使用,Servlet处理业务逻辑和数据操作,JSP负责展示。这种...

    dwr笔记整理(三)

    《DWR笔记整理(三)——深入理解与实践》 Direct Web Remoting(DWR)是一种JavaScript库,它使得在浏览器和服务器之间进行双向通信变得简单。本篇笔记将深入探讨DWR的核心概念、功能以及如何在实际项目中应用。...

    struts2学习笔记黑马程序员

    当需要支持同时上传多个文件时,可以修改Action类中的方法签名,接受类型为`List&lt;File&gt;`或`List&lt;String&gt;`的对象作为参数。 #### Struts2框架中的Ajax开发 **JSON介绍** JSON(JavaScript Object Notation)是一种...

    wicket的ajax范例(级联选择框)

    本文档通过一个具体的例子——级联选择框,来演示如何利用Wicket框架结合Ajax技术实现前端界面的动态更新。 #### 环境准备与基本配置 为了确保示例代码能够正常运行,首先需要搭建好开发环境: - **服务器**: ...

    崔希凡javaweb笔记day08-day13

    6. **Ajax异步通信**:在day13的笔记中,崔老师可能介绍了AJAX(Asynchronous JavaScript and XML),这是一种让网页实现局部刷新的技术,通过JavaScript与服务器进行异步数据交换,提升了用户体验。 7. **源码分析...

    dwr 例子,jar包,engine.js util.js 学习笔记

    - 调用:使用这个远程对象,JavaScript可以直接调用Java方法,DWR会自动处理请求的发送和结果的接收。 - 服务器端:DWR接收到请求后,找到对应的Java方法并执行,然后将结果返回。 - 响应:结果被封装成JSON或XML...

    Jetty cometd(Continuation)学习笔记

    Jetty 7版本引入了一个重要的新特性——支持跨域Ajax请求,打破了传统浏览器对同源策略的限制,使得不同域之间的Web应用能够进行更灵活的数据交互。 Cometd是一种基于Bayeux协议的实时Web通信技术,旨在解决Web应用...

    java学习笔记

    - **Ajax:** 异步JavaScript和XML,提高Web应用交互性。 - **SSH框架(Struts + Spring + Hibernate):** 流行的企业级应用开发框架组合。 #### Java历史与发展 - **Java之父——James Gosling:** - 1990年...

Global site tag (gtag.js) - Google Analytics