ajax浅谈、快速入门

一、什么是ajax?

上图展示的是用户在注册过程中常见的功能。

1、请分析这个功能如何实现:

1)页面获取当前用户输入的手机号

2)将手机号发送给服务器,服务器数据库查询,返回给浏览器一个结果

3)修改部分的页面,给用户显示提示信息(注意:不是重新加载页面)

那么能做到以上两件事情的技术,就是ajax技术!!!

2、Ajax特点:

1 浏览器自动的发送请求给服务器,自动接收服务器的响应

2 依然遵守http协议

3 ajax的请求和响应,数据量特别小

4 只修改页面的部分内容

总结什么是ajax:自动发送请求,接受响应,数据量非常小,依然按照http协议做网络的传输,可以更新页面部分数据的技术,就是ajax技术。

3、如何操作ajax技术?

简单讲:使用的是Javascript代码。

二、ajax运行机制

Ajax的工作原理相当于在用户和服务器之间加了—个中间层,使用户操作与服务器响应异步化。并不是所有的用户请求都提交给服务器,像—些数据验证和数据处理等都交给Ajax引擎自己来做, 只有确定需要从服务器读取新数据时再由Ajax引擎代为向服务器提交请求。

    Ajax其核心只有JavaScript、XMLHTTPRequest和DOM,在旧的交互方式中,由用户触发一个HTTP请求到服务器,服务器对其进行处理后再返回一个新的HTHL页到客户端, 每当服务器处理客户端提交的请求时,客户都只能空闲等待,并且哪怕只是一次很小的交互、只需从服务器端得到很简单的一个数据,都要返回一个完整的HTML页,而用户每次都要浪费时间和带宽去重新读取整个页面。而使用Ajax后用户从感觉上几乎所有的操作都会很快响应没有页面重载(白屏)的等待。

三、ajax快速入门

1、获取ajax核心对象、发送请求、接收响应

API文档:

 

1.1、获取XMLHttpRequest对象(ajax核心对象,ajax引擎)

XMLHttpRequest 是 AJAX 的基础(核心)。

代码演示:

<%@ page language="java" import="java.util.*" 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 getXHR() {
      //定义了一个变量
      var xmlhttp;
      if (window.XMLHttpRequest) {
         // code for IE7+, Firefox, Chrome, Opera, Safari
         xmlhttp = new XMLHttpRequest();
      } else {
         // code for IE6, IE5
         xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
      }
      return xmlhttp;
   }
  
   alert(getXHR());
</script>
</head>
<body>
 
</body>
</html>

效果:

1.2、向服务器发送请求——使用open方法和send方法

方法截图:

发送请求代码测试:

  //alert(getXHR());
   function test1() {
      //获取核心对象
      var xhr = getXHR();
      //发送请求给服务器
      // method 请求方式
      // url 请求地址
      // async true 设置是否异步操作(默认使用true:异步)
      xhr.open("get", "${pageContext.request.contextPath}/ajax?username=张三",
            true);
      xhr.send();
   }
 
   //test1();

Servlet接受请求参数代码:

publicclass AjaxServlet extends HttpServlet {
 
   publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
      String parameter = request.getParameter("username");
      String username = new String(parameter.getBytes("iso-8859-1"),"utf-8");
      System.out.println(username);
     
      response.setContentType("text/html;charset=utf-8");
      response.getWriter().write("测试Ajax成功!!!");
   }
 
   publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      doGet(request, response);
   }
} 

1.3、接收服务器响应

API截图:

ajax代码:

//测试获取响应数据
   function test2() {
      //获取核心对象
      var xhr = getXHR();
      //发送请求给服务器
      // method 请求方式
      // url 请求地址
      // async true 设置是否异步操作(默认使用true:异步)
      xhr.open("get", "${root}/ajax?username=张三",
            true);
      xhr.send();
 
      //接收来自服务器的响应
      var data = xhr.responseText;
      alert(data);
      // 问题:请求和响应都已经完成了,但是,使用弹窗显示数据的时候,数据没有出现?
      // 答:在发送请求之后,没有等待网络延迟,直接获取responseText数据,当前获取不到。
 
      /*
         场景:妹子(上海)八九点钟的时候,逛淘宝(杭州)。
           
         发送请求(上海)给淘宝服务器(杭州),网络延迟(460  200  150 单位:ms)。
         获取来自淘宝服务器(杭州)的响应(上海),网络延迟。
     
       */
   }

servlet代码:

publicclass AjaxServlet extends HttpServlet {
 
   publicvoid doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
 
      String parameter = request.getParameter("username");
      String username = new String(parameter.getBytes("iso-8859-1"),"utf-8");
      System.out.println(username);
     
      response.setContentType("text/html;charset=utf-8");
      response.getWriter().write("测试Ajax成功!!!");
   }
 
   publicvoid doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      doGet(request, response);
   }
}

1.4、设置onreadystatechange事件执行函数(等待服务器响应)

API截图:

ajax代码演示:

function test3() {
      //获取核心对象
      var xhr = getXHR();
      xhr.open("get", "${root}/ajax?username=张三",
            true);
      xhr.send();
      //等待网络延迟
      xhr.onreadystatechange = function() {
         // 判断当请求完成,响应就绪,而且响应状态为200
         if (xhr.readyState == 4 && xhr.status == 200) {
            var data = xhr.responseText;
            alert(data);
         }
      }
   }
 
   test3();

ajax小结(ajax代码怎么写):

    1)、获取核心对象

    2)、设置等待服务器响应

    3)、发送请求


2、ajax API 详解

2.1、onreadystatechange属性

存储函数(或函数名),每当readyState 属性改变时,就会调用该函数。

执行机制图解:

2.2、open方法

是什么:规定请求的类型、URL 以及是否异步处理请求。

代码:    xhr.open("get", "${root}/ajax?username=张三",true);


使用post方式还是get方式?

 官方建议:

MIME 类型:文件的媒体类型——.txt  .avi .mp3


演示发送post请求和中文请求参数:

function test4() {
      //获取核心对象
      var xhr = getXHR();
      xhr.open("post", "${root}/ajax",true);
      //设置一个消息头,模拟表单发送数据(注意:如果不设置消息头,服务器获取不到请求参数)
      xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
      //设置要发送的请求参数
      xhr.send("name=李四");
      //等待网络延迟
      xhr.onreadystatechange = function() {
         // 判断当请求完成,响应就绪,而且响应状态为200
         if (xhr.readyState == 4 && xhr.status == 200) {
            var data = xhr.responseText;
            alert(data);
         }
      }
   }

第三个参数async: True(异步) 或False(同步)?

页面准备:

function test5() {
      //获取核心对象
      var xhr = getXHR();
      xhr.open("get", "${root}/ajax?username=张三",  true);
      xhr.send();
      //等待网络延迟
      xhr.onreadystatechange = function() {
         // 判断当请求完成,响应就绪,而且响应状态为200
         if (xhr.readyState == 4 && xhr.status == 200) {
            var data = xhr.responseText;
            alert(data);
         }
      }
   }
   /**
      true :设置为异步请求,所有的请求操作是插队执行。
      false:设置为同步请求,所有的请求操作是排队执行。
  
   */
   //test5();

2.3、setRequestHeader方法

是什么:如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头

代码:

function test4() {
      //获取核心对象
      var xhr = getXHR();
      xhr.open("post", "${root}/ajax",true);
      //设置一个消息头,模拟表单发送数据(注意:如果不设置消息头,服务器获取不到请求参数)
      xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
      //设置要发送的请求参数
      xhr.send("name=李四");
      //等待网络延迟
      xhr.onreadystatechange = function() {
         // 判断当请求完成,响应就绪,而且响应状态为200
         if (xhr.readyState == 4 && xhr.status == 200) {
            var data = xhr.responseText;
            alert(data);
         }
      }
   }

注意:这个方法相当于,设置了表单的enctype属性的默认值,来模拟表单发送数据

2.4、send方法

是什么:将请求发送到服务器。

仅限post请求方式:

xhr.send(“username=张三”);

2.5、readyState属性

是什么:存有 XMLHttpRequest 的状态。从 0 到 4 发生变化。

代码截图:

 

ReadyState其他状态的应用(提示用户请求处理中):

function test6() {
      //获取核心对象
      var xhr = getXHR();
      //等待网络延迟
      xhr.onreadystatechange = function() {
         if (xhr.readyState == 1) {
           
            alert("服务器连接已建立 ");
         }
         if (xhr.readyState == 2) {
           
            alert("请求已接收");
         }
         if (xhr.readyState == 3) {
           
            alert("请求处理中");
         }
         // 判断当请求完成,响应就绪,而且响应状态为200
         if (xhr.readyState == 4 && xhr.status == 200) {
            var data = xhr.responseText;
            alert(data);
         }
      }
      //发送请求
      xhr.open("get", "${root}/ajax?username=张三",  true);
      xhr.send();
   }
   test6();

2.6、status属性

是什么:存储响应状态码

代码截图:

常用响应状态码:

200:OK

302:重定向

401:权限不足

404:找不到

405:没有这个方法(调用servlet程序的时候,发出响应,当前servlet中不存在这个方法去执行)

500:出错了

 

2.7、responseText属性

是什么:获取字符串形式的响应数据

代码:

var data=xhr.responseText;

3、jQuery Ajax

jQueryAjax的使用提供了非常好的封装,简单的很!

jQuery提供了6个编写Ajax的方法:


$.ajax(url, [settings])               最基本的ajax编程方法,推荐使用!

load(url, [data], [callback])        载入HTML代码并插入至DOM中,例如:$(“#mydiv”).load(“a.html”);(<%@ include%>)

$.get(url, [data], [callback], [type])  Ajax的get方式请求,一般用于获取数据

$.post(url, [data], [callback], [type])       Ajax的post方式请求,一般用于发送表单数据

$.getJSON(url, [data], [fn])                  Ajax跨域获取服务器数据 例子:www.taobao.com购买到www.alipay.com支付    

$.getScript(url, [callback])                   载入并执行一个跨域的js文件

 

最基本的$.ajax()  $.get()  $.post()

$.ajax(url,[settings])

$(function(){
     
      $.ajax({
         //设置请求方式
         type:"get",
         //设置请求路径
         url:"${root}/ajax?username=张三",
         //设置是否异步
         async:"true",
         success:function(data){
            //获取响应的数据
            alert(data);
         }
      }); 
   });

效果:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值