zoukankan      html  css  js  c++  java
  • Ajax原理

    本文将通过一个具体的例子来展示Ajax的工作原理,通过与传统请求响应方式的对比展现Ajax中处理请求响应的不同方式。在这个示例程序中,所要完成的任务非常简单,仅仅需要输入一个姓名然后提交这个表单,在服务器端处理这个请求,然后在页面显示处理的结果,在下面的示例程序中,将展示通过传统方式和Ajax方式分别处理这个请求响应的具体过程。

    传统方式:

    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>Insert title here</title>
    </head>
    <body>
    	<form action="SayHello.jsp">
    		name:<input type="text" name="name"/>
    		<input type="submit" name="submit"/>
    	</form>
    	<%
    		if(request.getParameter("name")!=null&&request.getParameter("name").length()>0)
    			out.print("Hello "+request.getParameter("name"));
    	%>
    </body>
    </html>
    

    传统方式的实现方式是直接将表单提交到自身的页面,然后在服务器端经过编译后执行其中的Java代码。

    Ajax方式:

    页面代码

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
    <title>SayHello</title>
    <script type="text/javascript">
    	//创建XMLHttpReques对象
    	function createXMLHttpRequest(){
    		
    		if(window.XMLHttpRequest){
    			//Mozilla浏览器
    			
    			XMLHttpReq=new XMLHttpRequest();
    		}else{
    			
    			//IE浏览器
    			if(window.ActiveXObject){
    				try{
    					XMLHttpReq=new ActionXObject("Msxm12.XMLHTTP");
    				}catch(e){
    					try{
    						XMLHttpReq=new ActiveXObject("Microsoft.XMLHTTP");
    					}catch(e){}
    				}
    			}
    		}
    	}
    	//处理服务器响应结果
    	 function handleResponse() {
            // 判断对象状态
            if (XMLHttpReq.readyState == 4) { 
                // 信息已经成功返回,开始处理信息
               if (XMLHttpReq.status == 200) { 
                    var out = "";
                    var res = XMLHttpReq.responseXML;
                    var response= res.getElementsByTagName("response")[0].firstChild.nodeValue;
                    //5. 解析服务器返回的信息,更新用户界面
                    document.getElementById("Hello").innerHTML = response;
                   }
             }
           }
    	//发送客户端的请求
    	function sendRequest(url){
    		//1.创建XMLHttpRequest
    		createXMLHttpRequest();
    		//2.设置回调函数
    		XMLHttpReq.onreadystatechange=handleResponse;
    		//3.初始化XMLHttpRequest组建并发送请求
    		XMLHttpReq.open("GET",url,true);
    		//发送请求
    		XMLHttpReq.send(null);
    	}
    	//开始调用Ajax的功能
    	function sayHello()
    	{
    		var name=document.getElementById("name").value;
    		//发送请求
    		sendRequest("SayHell?name="+name);
    	}
    </script>
    </head>
    <body>
    	<font size="1">
    		name:<input type="text" id="name"/>
    		<input type="button" value="提交" onclick="sayHello()"/>
    		<div id="Hello"></div>
    	</font>
    </body>
    </html>

    servlet代码

    package servlets;
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    
    
    public class SayHello extends HttpServlet {
    
    	@Override
    	protected void doPost(HttpServletRequest request, HttpServletResponse response)
    			throws ServletException, IOException {
    		//设置生成文件的类型和编码格式
    		response.setContentType("text/xml;charset=UTF-8");
    		response.setHeader("Cache-Control", "no-cache");
    		PrintWriter out=response.getWriter();
    		String output="";
    		//处理接收到的参数,生成响应的XML文档
    		if(request.getParameter("name")!=null&&request.getParameter("name").length()>0)
    			output="<response>Hello "+request.getParameter("name")+"</response>";
    		out.println(output);
    		System.out.println(output);
    		out.close();
    	}
    
    	@Override
    	protected void doGet(HttpServletRequest req, HttpServletResponse resp)
    			throws ServletException, IOException {
    		doPost(req,resp);
    	}
    }
    

    配置文件

      <servlet>
      	<servlet-name>SayHello</servlet-name>
      	<servlet-class>servlets.SayHello</servlet-class>
      </servlet>
      <servlet-mapping>
      	<servlet-name>SayHello</servlet-name>
      	<url-pattern>/SayHell</url-pattern>
      </servlet-mapping>


    代码解析:

    1.创建XMLHttpRequest

    2.设置回调函

    3.初始化XMLHttpRequest组建并发送请求

    4. 服务器返回响应信息

    5. 解析服务器返回的信息,更新用户界面

    详细调用过程如下

    最终Ajax方式处理请求的效果是通过XMLHttpRequest对象向服务器发送请求,在得到服务器的返回的处理结果以后,文本框中的用户输入信息依然存在,使用Ajax只是刷新了页面的局部区域,把处理的结果展示在页面的指定位置,对于页面的其他部分不会进行刷新。

    下一篇:XMLHttpRequest常用方法属性解析

  • 相关阅读:
    第七届河南省赛F.Turing equation(模拟)
    第八届acm省赛 A挑战密室(模拟)
    展开字符串(dfs)
    排名(水题)
    Identity Card(水题)
    Dropping Balls (二叉树+思维)
    SQL学习——IN运算符
    SQL学习——BETWEEN运算符
    SQL学习——LIKE运算符
    【数字图像处理】灰度转换算法
  • 原文地址:https://www.cnblogs.com/beijiguangyong/p/2623100.html
Copyright © 2011-2022 走看看