java web 之 AJAX用法

AJAX :Asynchronous JavaScript And XMLjavascript

指异步 JavaScript 及 XML一种日渐流行的Web编程方式html

  • Better
  • Faster
  • User-Friendly

不是一种新的编程语言,而是一种用于建立更好更快以及交互性更强的 Web 应用程序的技术,是基于JavaScript、XML、HTML、CSS新用法。java

呈上AJAX之父 Jesse James Garrett 大佬帅照, emmm 颇有魔性的笑容~编程

 AJAX交互模型json

 

AJAX编码步骤
一、建立XmlHttpRequest对象
二、注册状态监控回调函数
三、创建与服务器的异步链接
四、发出异步请求
以下是一个搜索框提示的JavaScript函数写法浏览器

 1 window.onload = function(){  2         //获得搜索框对象
 3         var searchElement = document.getElementById("name");  4         var div = document.getElementById("context1");  5         searchElement.onkeyup = function(){  6             //给文本框注册事件
 7             var name = this.value;  8             if(name==""){  9                 div.style.display="none"; 10                 return; 11  } 12             var xhr = getXMLHttpRequest();            //1 执行顺序:1 13             xhr.onreadystatechange = function(){         //2 执行顺序:4 14                 if(xhr.readyState == 4){ 15                     if(xhr.status == 200){ 16                         var str = xhr.responseText; 17                         var ss = str.split(","); 18                         var childDivs = ""; 19                         for ( var i = 0; i < ss.length; i++) { 20                             childDivs+="<div onmouseover='changeBackground_over(this)' onmouseout='changeBackground_out(this)' onclick='writeText(this)'>"+ss[i]+"</div>"; 21  } 22                         div.innerHTML=childDivs; 23                         div.style.display="block"; 24  } 25  } 26  }//time 防止IE浏览器缓存问题 27             xhr.open("get","${pageContext.request.contextPath}/servlet/searchBookAJAXServlet?name="+name+"&time="+new Date().getTime());//3 执行顺序:2 28             xhr.send(null);                     //4    执行顺序:3 29  } 30  } 31  function changeBackground_over(div){ 32             div.style.backgroundColor = "gray"; 33  } 34  function changeBackground_out(div){ 35             div.style.backgroundColor = ""; 36  } 37  function writeText(div){ 38         var searchElement = document.getElementById("name"); 39         searchElement.value = div.innerHTML; 40         div.parentNode.style.display="none"; 41     }


//-------------------------------下面是搜索框代码

<div id="context1" style="display:block;border:1px solid black;width: 128px; height:100px;position:absolute;left: 945px;top: 137px;"></div>

//-------------------------------下面是引入js
<script type="text/javascript" src="${pageContext.request.contextPath}/js/my.js">

 对应调用的是一个SearchBookAJAXServlet,这里能够本身进行数据的封装,也能够直接调用json,json的使用很简单,String str = JSONArray.fromObject(list).toString();便可。缓存

 1 import java.io.IOException;  2 import java.util.List;  3 
 4 import javax.servlet.ServletException;  5 import javax.servlet.http.HttpServlet;  6 import javax.servlet.http.HttpServletRequest;  7 import javax.servlet.http.HttpServletResponse;  8 
 9 import net.sf.json.JSON; 10 import net.sf.json.JSONArray; 11 
12 import com.itheima.domain.Book; 13 import com.itheima.service.BookServiceImpl; 14 
15 public class SearchBookAJAXServlet extends HttpServlet { 16 
17     public void doGet(HttpServletRequest request, HttpServletResponse response) 18             throws ServletException, IOException { 19         response.setContentType("text/html;charset=UTF-8"); 20         response.setCharacterEncoding("UTF-8"); 21         String name = request.getParameter("name"); 22         
23         name = new String(name.getBytes("GBK"),"UTF-8"); 24  System.out.println(name); 25         
26         BookServiceImpl bsi = new BookServiceImpl(); 27         List<Object> list = bsi.searchBookByName(name); 28         //把集合中的数据转换为字符串 返回到网页
29         /*String str="["; 30  for (int i = 0; i < list.size(); i++) { 31  if(i>0){ 32  str+=","; 33  } 34  str+="\""+list.get(i)+"\""; 35  } 36  str+="]";*/
37         //建立json对象
38         String str = JSONArray.fromObject(list).toString(); 39  System.out.println(str); 40         //把数据直接响应到客户端
41  response.getWriter().write(str); 42         //request.setAttribute("str", str); 43         //request.getRequestDispatcher("/login.jsp").forward(request, response);
44  } 45 
46     public void doPost(HttpServletRequest request, HttpServletResponse response) 47             throws ServletException, IOException { 48 
49         this.doGet(request, response); 50  } 51 
52 }

 建立XMLHttpRequest对象时,不一样浏览器提供不一样的支持服务器

 1 //获取XMLHttpRequest对象
 2 function getXMLHttpRequest() {  3     var xmlhttp;  4     if (window.XMLHttpRequest) {// code for all new browsers
 5         xmlhttp = new XMLHttpRequest();  6     } else if (window.ActiveXObject) {// code for IE5 and IE6
 7         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");  8  }  9     return xmlhttp; 10 }

 XMLHttpRequest 属性app

  •     readyState:类型short;只读
  •     responseText:类型String;只读
  •     responseXML:类型Document;只读
  •     status:类型short;只读

方法:dom

  1. open()
  2. send()
  3. setRequestHeader()
  4. 事件处理器  onreadystatechange

将状态触发器绑定到一个函数

  1. var xmlHttp;
  2. createXMLHttpRequest()
  3. xmlHttp.onreadystatechange = processor;  这里的processor是回调函数的方法名
  4. function processor (){… …}

使用open方法创建链接

open(method,url, asynch)

  • 其中method表示HTTP调用方法,通常使用"GET","POST"
  • url表示调用的服务器的地址
  • asynch表示是否采用异步方式,true表示异步,通常这个参数不写

范例代码

  • xmlHttp.open("POST", "url");
  • xmlHttp.open("GET", "url?name=xxx&pwd=xxx");

向服务器端发送数据

  1. GET方式提交   数据在URL上         xmlHttp.send(null);
  2. POST方式提交
  • xmlHttp.setRequestHeader("CONTENT-TYPE","application/x-www-form-urlencoded");
  • xmlHttp.send("name=xxx&pwd=xxx");

在回调函数中对数据进行处理

function 回调函数(){
    if(xmlHttp.readyState == 4) { //若是响应完成
            if(xmlHttp.status == 200) {//若是返回成功
                …
            }
    }
}
经常使用的服务器返回数据格式

  • HTML片断
  • JSON格式的数据
  • XML格式的数据
相关文章
相关标签/搜索