欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Ajax核心知识

程序员文章站 2022-03-09 14:55:25
...
1. XMLHttpRequest对象创建

所有现代浏览器均支持XMLHttpRequest对象(IE5和IE6使用ActiveXObject)。

XMLHttpRequest用于在后台与服务器交换数据。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。


2. XMLHttpRequest对象请求后台

open(method,url,async)规定请求的类型、URL以及是否异步处理请求。
method:请求的类型;GET或POST
url:文件在服务器上的位置
async:true(异步)或false(同步)

send(string)将请求发送到服务器。
string:仅用于POST请求GET还是POST?
与POST相比,GET更简单也更快,并且在大部分情况下都能用。

然而,在以下情况中,请使用POST请求:
1) 无法使用缓存文件(更新服务器上的文件或数据库)
2) 向服务器发送大量数据(POST没有数据量限制)
3) 发送包含未知字符的用户输入时,POST比GET更稳定也更可靠

setRequestHeader(header,value)向请求添加HTTP头。
header:规定头的名称
value:规定头的值

xmlhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");异步-True或False?
AJAX指的是异步JavaScript和XML(AsynchronousJavaScriptandXML)。
为True的话,表示的是异步,异步表示程序请求服务器的同时,程序可以继续执行;能提高系统的运行效率;
为False的话,表示同步,JavaScript会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止。
我们一般都是用True;


ajax.jsp

<%@ 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=UTF-8">
<title>Insert title here</title>
<script type="text/javascript">
    function loadName(){
        var xmlHttp;
        if(window.XMLHttpRequest){
            xmlHttp=new XMLHttpRequest();
        }else{
            xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
        }
        alert("readState状态:"+xmlHttp.readyState+";status状态:"+xmlHttp.status);
        xmlHttp.onreadystatechange=function(){
            alert("readState状态:"+xmlHttp.readyState+";status状态:"+xmlHttp.status);
            if(xmlHttp.readyState==4 && xmlHttp.status==200){
                alert(xmlHttp.responseText);
                document.getElementById("name").value=xmlHttp.responseText;
            }
        };
        // xmlHttp.open("get", "getAjaxName?name=jack&age=11", true);
        // xmlHttp.send();
        
        // xmlHttp.open("post", "getAjaxName?name=jack&age=11", true);
        // xmlHttp.send();
        
        xmlHttp.open("post", "getAjaxName", true);
        xmlHttp.setRequestHeader("Content-type","application/x-www-form-urlencoded");
        xmlHttp.send("name=jack&age=11");
    }
</script>
</head>
<body>
<div style="text-align: center;">
    <div><input type="button" onclick="loadName()" value="Ajax获取数据"/>&nbsp;&nbsp;<input type="text" id="name" name="name" /></div>
</div>
</body>
</html>

web.xml

<servlet>
      <servlet-name>getAjaxNameServlet</servlet-name>
      <servlet-class>com.andrew.web.GetAjaxNameServlet</servlet-class>
</servlet>
<servlet-mapping>
      <servlet-name>getAjaxNameServlet</servlet-name>
      <url-pattern>/getAjaxName</url-pattern>
</servlet-mapping>

GetAjaxNameServlet.java

package com.andrew.web;
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 GetAjaxNameServlet extends HttpServlet{
    private static final long serialVersionUID = 1L;
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        this.doPost(request, response);
    }
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        String name=request.getParameter("name");
        String age=request.getParameter("age");
        System.out.println("name="+name);
        System.out.println("age="+age);
        response.setContentType("text/html;charset=utf-8");
        PrintWriter out=response.getWriter();
        out.println("ajax返回的文本");
        out.flush();
        out.close();
    }
}

http://localhost:8080/HeadFirstAjaxJsonChap02/ajax.jsp
页面显示:
ajax返回的文本
后台打印:
name=jack
age=11
alert弹窗:
readState状态:0;status状态:0
readState状态:1;status状态:0
readState状态:2;status状态:200
readState状态:3;status状态:200
readState状态:4;status状态:200
ajax返回的文本
相关标签: ajax