ajax学习篇9

ajax工作原理:

下面这段是来自一个网友的blog: 

Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。这其中最关键的一步就是从服务器获得请求数据。要清楚这个过程和原理,我们必须对XMLHttpRequest有所了解。

 XMLHttpRequestajax的核心机制,它是在IE5中首先引入的,是一种支持异步请求的技术。简单的说,也就是javascript可以及时向服务器提出请求和处理响应,而不阻塞用户。达到无刷新的效果。

 所以我们先从XMLHttpRequest讲起,来看看它的工作原理。

 首先,我们先来看看XMLHttpRequest这个对象的属性。

  它的属性有:

  onreadystatechange每次状态改变所触发事件的事件处理程序。

  responseText从服务器进程返回数据的字符串形式。

  responseXML 从服务器进程返回的DOM兼容的文档数据对象。

  status从服务器返回的数字代码,比如常见的404(未找到)和200(已就绪)

  status Text伴随状态码的字符串信息

  readyState对象状态值

    0 (未初始化)对象已建立,但是尚未初始化(尚未调用open方法)

    1 (初始化)对象已建立,尚未调用send方法

    2 (发送数据) send方法已调用,但是当前的状态及http头未知

    3 (数据传送中)已接收部分数据,因为响应及http头不全,这时通过responseBodyresponseText获取部分数据会出现错误,

    4 (完成)数据接收完毕,此时可以通过通过responseXmlresponseText获取完整的回应数据

看了上面的一段话我们知道了,ajax的原理。

所以对于ajax开发步骤应该是:

1. 创建对象

2. 打开服务器

3. 发送数据

4. 接受服务器的数据相应。

下面做一个简单例子用get方式的实现和servlet的一个交互:这个是一个index.jsp

<%@ page language="java"import="java.util.*"pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPEHTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<basehref="<%=basePath%>">

<title>My JSP 'index.jsp' starting page</title>

<scripttype="text/javascript"src="js/fish.js"></script>

</head>

<body>

<inputid="mybutton"type="button"value="加载数据"/>

</body>

</html>

第二个是fish.js

window.onload = function() {

function createXMLHttpRequest() {

var xmlhttp=null;//请求对象

try {//IE浏览器中创建此对象

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

} catch (e) {

try {//IE浏览器中创建此对象

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

} catch (e) {

try {

// Firefox, Chrome, Opera, Safari浏览器中创建此对象

xmlhttp = new XMLHttpRequest();

if (xmlhttp.overrideMimeType) {

xmlhttp.overrideMimeType("text/xml");

}

} catch (e) { alert("浏览器不支持xmlHttpRequest!");}

}

}

return xmlhttp;

}

document.getElementById("mybutton").onclick =function() {

//得到xmlhttprequest对象

var xmlreq=createXMLHttpRequest();

xmlreq.onreadystatechange=function(){//每次状态改变都会调用这个函数

alert(xmlreq.readyState);

alert(xmlreq.status);//如果返回200就说明请求成功了。

}

//打开与服务器的连接

xmlreq.open("get","servlet/MyServlet",true);//在第二个参数后可以跟着一些数据的。

//发送数据

xmlreq.send(null);//如果是get方式那么必须是null

}

}

3servlet代码

package com.fish;

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;

publicclassMyServlet extends HttpServlet {

publicvoid doGet(HttpServletRequest request, HttpServletResponse response)

throws ServletException, IOException {

PrintWriter out = response.getWriter();

System.out.println("**************");

// String a= request.getParameter("fish");

// System.out.println(a);

//

}

}

5. 这个是servletxml的配置

<?xmlversion="1.0"encoding="UTF-8"?>

<web-appversion="2.5"

xmlns="http://java.sun.com/xml/ns/javaee"

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://java.sun.com/xml/ns/javaee

http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

<display-name></display-name>

<servlet>

<servlet-name>MyServlet</servlet-name>

<servlet-class>com.fish.MyServlet</servlet-class>

</servlet>

<servlet-mapping>

<servlet-name>MyServlet</servlet-name>

<url-pattern>/servlet/MyServlet</url-pattern>

</servlet-mapping>

<welcome-file-list>

<welcome-file>index.jsp</welcome-file>

</welcome-file-list>

</web-app>

你可能感兴趣的:(Ajax)