jQuery之ajax技术的详细介绍


Posted in Javascript onJune 19, 2013

1:Ajax技术包含以下几点:
基于Web标准(XHTML + CSS)的展示
使用DOM进行动态显示和交互
使用XMLHttpRequest进行数据交换和相关操作
使用javascript将所有内容绑定在一起
Ajax的核心是JavaScript的XMLHttpRequest对象,它是一种支持异步请求的技术。简而言之,使用JS可以控制XMLHttpRequest对象向服务器提出请求并处理响应,
而不影响用户对页面的正常访问。对于XMLHttpRequest对象,不同的浏览器提供了不同的支持,IE是将其作为ActiveX控件集成到浏览器中的,而其他主流的浏览器直接
作为一般的JS对象来创建。

2:JS中的Ajax

XMLHttpRequest对象的属性及简要说明

名称 说明
readyState 通信的状态,当XMLHttpRequest对象把一个HTTP请求发送到服务器,到接收到服务器响应信息,整个过程将经历5种状态,该属性取值为为0-4
onreadystatechange 设置回调事件处理程序,当readyState属性的值改变时,会激发此事件
responseText 服务器返回的text/html格式的文档
responseXML 服务器返回的text/xml格式的文档
status 描述了HTTP响应short类型的状态代码,100表示Continue, 101表示Switching protocols数据交换,200表示执行正常,404表示未找到页面,500表示内部程序错误
statusText HTTP响应的状态代码对应的文本(OK, not found)

readyState属性代码

代码 说明
0 代表未初始化的状态。创建了一个XMLHttpRequest对象,尚未初始化
1 代表连接状态,已经调用了open方法,并且已经准备好发送请求
2 代表发送状态,已经调用了send方法发出请求,尚未得到响应结果
3 代表正在接收状态,已经接收了HTTP响应的头部信息,正在接收响应内容
4 代表已加载状态,此时响应内容已完全被接收

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Ajax</title>
<script src="JS/ajax.js"></script>
<style type="text/css">
 body { padding:20px; }
 #browser{ border:solid 1px #666; width:500px; height:300px; overflow:auto; }
 #content{ width:500px; height:80px; margin:10px 0; }</style>
</head>
<body>
<input id="Access" type="button" value="Access" />
<br />
<textarea id="content"></textarea>
<div id="browser"></div>
</body>
</html>

ajax.js的内容:
var xmlRequest;
function CreateRequest()
{
 /* 创建XMLHttpRequest对象 */
 if(window.ActiveXObject)
 {
  return new ActiveXObject("Microsoft.XMLHTTP");
 }
 else if(window.XMLHttpRequest)
 {
  return new XMLHttpRequest();
 }
}
function ResponseHandler()
{
 if(xmlRequest.readyState == 4 && xmlRequest.status == 200)
 {
  /* 如果通信成功,并且响应正常,执行以下操作 */  var reqContent = xmlRequest.responseText;
  document.getElementById("browser").innerHTML = reqContent;
  document.getElementById("content").value = reqContent;
 }
}
function AjaxAccess()
{
 /* 异步请求百度首页 */
 xmlRequest = CreateRequest();  //创建XMLHttpRequest对象
 xmlRequest.onreadystatechange = ResponseHandler;  //设置回调函数
 xmlRequest.open("GET","http://www.baidu.com");  //初始化请求对象
 xmlRequest.send(null);   //发送请求信息
 /* 触发事件以后提示正在打开百度首页 */
 var brow = document.getElementById("browser");
 brow.innerHTML = "<h1>正在打开百度搜索</h1>";
}
window.onload = function()
{
 document.getElementById("Access").onclick = AjaxAccess;  //设置按扭单击事件
}

jQuery之ajax技术的详细介绍
3:jQuery中的Ajax
$.ajax(options)方法
options是以“键/值”对的形式设置的,用于设置Ajax请求的参数,如请求方式、请求URL、回调函数等。
常用属性如下:
url:
发送请求的地址
type:请求方式,GET和POST,默认为GET
timeout: 设置请求超时时间,该属性为数值型,单位为毫秒
data: 发送到服务器的数据,“键/值”对形式,该属性可以是对象或者字符串,如果是对象,则自动转换为字符串
dataType:  预期服务器返回的数据类型,该属性为字符串类型。可选值如下: xml、html:返回纯文本HTML信息,包含的标签(script标签或者style标签)会在
文本插入DOM的时候执行、 script:返回纯文本JS代码、json、jsonp、text
contentType: 发送信息至服务器时内容编码类型,该属性为字符串类型,默认值为"application/x-www-form-urlencoded",一般不用设置,因为默认值适合大多数应用场合
beforeSend: 请求发送前的事件,该属性为其设置事件处理程序,可用于发送前修改XMLHttpRequest的参数,如头信息。
function(XMLHttpRequest) {
this;  /*这里this关键字用于访问.ajax()方法的options参数对象*/
  } 
complete: 请求完成后的事件,无论请求成功与否,都将触发该事件。
function(XMLHttpRequet, textStatus) {
this; /*这里this关键字用于访问.ajax()方法的options参数对象*/
  }
textStatus参数返回当前请求的执行状态(succss和error等)
success: 请求执行成功时的事件。
function(data, textStatus) {
this;  /*这里this关键字用于访问.ajax()方法的options参数对象*/
  } 
error: 请求执行失败时的事件
function(XMLHttpRequest, textStatus, errorThrown) {
this;  /*这里this关键字用于访问.ajax()方法的options参数对象*/
  }
global: 是否触发全局Ajax事件,该属性为Boolean类型,默认值为false

$(document).ready(function(){
 $("#Access").click(function(){
  var xmlReq = $.ajax({
      type:'GET',
      url:'http://www.sougou.com',
      success:function(reqContent)
      {
       $("#browser").html(reqContent);
       $("#content").text(reqContent);
      }});
  $("#browser").html("<h1>正在打开搜狗搜索</h1>");
 });
});

4:load方法
   load(url, [data], [callback]);
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gbk" />
<title>Load</title>
<script type="text/javascript" src="JS/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="JS/Load.js"></script>
<style type="text/css">
 body { padding:20px; }
 #commentList{ border:solid 2px #888; width:500px; overflow:auto; }
 #commentList p{ border-bottom:solid 1px #ddd; margin-bottom:30px; padding-bottom:15px; font-size:13px; }
 #commentList div{ background:#eee; }
 #commentList h3{ color:#888; padding:10px 0 0 0; }</style>
</head>
<body>
<h2>回复列表</h2>
<input type="button" id="refresh" value="刷新列表" />
<div id="commentList"></div>
</body>
</html>

Load.js       
$(document).ready(function(){
 $("#refresh").click(function(){
  /* 要访问的页面URL,根据你实际情况做相应修改 */
  var url = "http://www.sogou.com";
  $("#commentList").load(url);  //加载相应内容
 }); 
});

5:$.get()方法
是一个全局方法,该方法使用GET方式来进行异步请求,语法格式如下:
         var xmlReq = $.get(url, [data], [callback], [type]);
         $.get("www.baidu.com", 
             {
                  user: 'zhangsan'
             }
             );
         callback: function(data, textStatus) {}

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Get</title>
<script type="text/javascript" src="JS/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="JS/Get.js"></script>
<style type="text/css">
body{ padding:30px 80px; font-size:14px; }
#blogList{ width:240px; height:120px; margin:10px 0; padding:8px; border:solid 1px #777; font-size:13px; }
#blogList span{ display:inline-block; width:50px; text-align:right; margin-right:20px; color:#999; }
</style>
</head>
<body>
分类:
<select id="blogClass">
<option selected="selected" value="">所有</option>
<option>CSS</option>
<option>.NET</option>
</select>
<input type="button" id="Search" value="Search" />
<div id="blogList"></div>
</body>
</html>

Get.js
$(document).ready(function(){
 $("#Search").click(function(){  /* 使用Get方式请求指定URL */
  $.get("http://localhost:2154/Web/BlogList.aspx",
  {
   key : $("#blogClass").val()
  },
  function(data){
   $("#blogList").html(data);
  });
 });
 $("#Search").click();  //触发一次单击事件
});

BlogList.aspx
<%@ Page Language="C#" %>
<%
    /* 
     * 分别向数组里添加一些数据,
     * 这些数据一般来自数据库,
     * 这里只是模拟,就静态添加了
     */
    string[] blogClass = { "CSS", "CSS", ".NET", ".NET", ".NET", ".NET" };
    string[] blogTitle = { "CSS中的padding", "CSS入门", "C#中的类", 
                           "C#基础知识", "C#面向对象", "C#设计模式" };    string key = Request["key"];  //获取请求服务器的关键字
    /*
     * 遍历数组集合
     */
    for (int i = 0; i < blogClass.Length; i++)
    {
        /*
         * 如果关键字为空,显示所有的记录
         * 如果关键字等于分类名称,显示该分类下的记录
         */
        if (key == null || key == string.Empty || key == blogClass[i])
        {
            %>
            <div>
            <span><%= blogClass[i]%></span><%= blogTitle[i]%>
            </div>
            <%
        }
    }    
%>

6:$.post()方法
var xmlReq = $.post(url, [data], [callback], [type]);
$.get()方法是以GET方式提交的数据,所有的参数信息都将追加到URL后面,而Web请求一般对URL长度有一定限制,所以$.get()方法传递的数据长度也有一定的上限,
而$.post()方法是将参数作为消息的实体发送到服务器的,对数据无长度上的影响。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>Post</title>
<script type="text/javascript" src="JS/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="JS/Post.js"></script>
<style type="text/css">
body{ padding:20px 80px; font-size:14px; }
#login{ width:240px; height:160px; margin:10px 0; padding:8px; border:solid 1px #777; font-size:13px; }
#login h4{ color:#666; margin:5px 0; font-size:18px; }
#login span{ font-size:15px; line-height:40px; font-weight:700; }
input,button{ margin:15px 0 0 0; line-height:14px;  }
input{ height:15px; }
</style>
</head>
<body>
<div id="login">
 <h4>用户登录</h4>
 Username:<input name="username" />
    <br />
    Password:<input name="password" type="password" />
    <br />
    <button id="submit">Submit</button>
</div>
</body>
</html>

Post.js 
$(document).ready(function(){
 $("#submit").click(function(){
  $.post("http://localhost:2154/Web/Login.aspx",
  {
   username : $("input[name='username']").val(),
   password : $("input[name='password']").val()
  },
  function(data){
   $("#login").html(data);
  });
 });
});

Login.aspx 
<%@ Page Language="C#" %>
<span>欢迎你  <font color="red"><%= Request.Form["username"] %></font>
<br />
你的身份是  <font color="red">管理员</font>
<br />
  <button>修改资料</button>
  <button>注销登录</button>
</span>

7:$.getJSON()方法
var xmlReq = $.getJSON(url, [data], [callback]);
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>getJSON</title>
<script type="text/javascript" src="JS/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="JS/getJSON.js"></script>
<style type="text/css">
body{ padding:20px; }
#peoples{ background:#999; border:solid 2px #333; width:300px; }
#peoples td{ padding:5px; }
#peoples thead{ background:#555; color:#FFF; font-weight:700; font-size:16px; }
#peoples tbody{ font-size:13px;background:#fff; }
</style>
</head>
<body>
<table id="peoples" cellspacing="1">
<thead>
<tr><td>Name</td><td>Age</td><td>Sex</td></tr>
</thead>
<tbody></tbody>
</table>
</body>
</html>

getJSON.js 
$(document).ready(function(){
 /* 异步请求,载入 JSON 数据 */       
 $.getJSON("http://localhost:2154/Web/PeopleList.aspx",
  function(data){  
   /* 遍历请求结果 */
   $.each(data,
    function(index, p){
     var html = "<tr><td>" + p.name + "</td><td>" + p.age + 
     "</td><td>" + (p.isMale ? "male" : "female") + "</td></tr>"
     $("#peoples>tbody").append(html);
    });
  });
});

PeopleList.aspx 
<%@ Page Language="C#" %>
[{
 "name" : "David li",
 "age" : 61,
 "isMale" : true
},{
 "name" : "Michael Clinton",
 "age" : 53,
 "isMale" : true
},{
 "name" : "Brook Ann",
 "age" : 23,
 "isMale" : false
},{
 "name" : "Mary Johnson",
 "age" : 35,
 "isMale" : false
},{
 "name" : "Elizabeth Jones",
 "age" : 33,
 "isMale" : false
},{
 "name" : "James Smith",
 "age" : 25,
 "isMale" : true
}]

8:$.getScript()方法
var xmlReq = $.getScript(url, [callback]);
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>getScript</title>
<script type="text/javascript" src="JS/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="JS/getScript.js"></script>
<style type="text/css">
body{ padding:30px; }
</style>
</head>
<body>
<h1>使用getScript()方法异步加载JavaScript文件</h1>
<input type="button" value="Button" id="input" />
</body>
</html>

getScript.js 
$(document).ready(function(){
 $("#input").click(function(){
  $.getScript("Test.js", function(data){
   showMsg();
  });
 });
});

Test.js 
function showMsg(){
 alert("This is Message"); 
}

9:序列化表单数据
jQuery为了解决参数很多的问题,提供了序列化的方法简化对表单数据的收集和格式化。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>serialize</title>
<script type="text/javascript" src="JS/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="JS/serialize.js"></script>
<style type="text/css">
body{ padding:20px; }
</style>
</head>
<body>
<table>
<tbody>
<form onsubmit="return false;" >
<tr><td>Username:</td><td><input name="username" /></td></tr>
<tr><td>Age:</td><td><input name="age" /></td></tr>
<tr><td>Sex:</td><td>
 <select name="isMale">
     <option value="true">男</option>
        <option value="false">女</option>
    </select></td></tr>
<tr><td>Email:</td><td><input name="email" /></td></tr>
<tr><td>Details:</td><td><textarea name="details"></textarea></td></tr>
<tr><td></td><td><button name="btnSubmit">Submit</button></td></tr>
</form>
</tbody>
</table>
</body>
</html>

serialize.js 
$(document).ready(function(){
 $("button[name='btnSubmit']").click(function(){ 
  $.post("http://localhost:2154/Web/Register.aspx",
   $("form").serialize(),  //序列化表单数据
   function(data){
    $("table tbody").append("<tr><td colspan=2>" + data + "</td></tr>");
   });
  });
});

Register.aspx 
<%@ Page Language="C#" %>
Username:<%= Request["username"] %>
<br />
Age:<%= Request["age"] %>
<br />
IsMale:<%= Request["isMale"]%>
<br />
Email:<%= Request["email"]%>
<br />
Details:<%= Request["details"]%>

10:serializeArray()方法
该方法将页面表单序列化成一个JSON结构的对象,该对象以"键/值"对集合的形式封装了表单里的所有元素值。
这里注意的是该方法返回的是一个JSON对象,而不是JSON字符串
该JSON对象结构如下:
       [
           {"name": "name1" , "value":  "value1"},
           {"name": "name2" , "value":  "value2"},
           {"name": "name3" , "value":  "value3"}
       ]
     var jsonData = $("form").serializeArray();
     var textName = jsonData[0].name;
     var textValue = jsonData[0].value;

11:设置全局Ajax默认选项
在应用中,经常编写大量的Ajax方法来实现各种功能,每次都在$.ajax()方法中设置大量参数,非常不方便,jQuery提供了$.ajaxSetup()方法,可以设置
全局的Ajax默认参数项。
$.ajaxSetup([options]);
$.ajaxSetup({
     url: 'Test.html',
     type: 'POST',
     global: false,  //禁止触发全局事件
     dataType: 'json',
     error: function(xhr, textStatus, errorThrown) {
           alert(textStatus);
      }
     });

12:jQuery全局事件
ajaxComplete(callback);   //请求完成时触发该事件
ajaxError(callback);   //请求出现错误时触发该事件
ajaxSend(callback);  //请求发送前触发该事件
ajaxStart(callback);  //请求开始时触发该事件
ajaxStop(callback);  //请求结束时触发该事件
ajaxSuccess(callback);  //请求成功时触发该事件
ajaxStart()方法和ajaxStop方法的事件处理程序是一个无参的函数,其余都可以有3个参数,语法格式如下:
       function(event, XHR, settings) {
               event是触发的事件对象
               XHR是XMLHttpRequest对象
              settings是Ajax请求配置参数
         }

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>AjaxGlobalEvent</title>
<script type="text/javascript" src="JS/jquery-1.4.2.min.js"></script>
<script type="text/javascript" src="JS/AjaxGlobalEvent.js"></script>
<style type="text/css">
body{ padding:20px; }
textarea{ width:350px; height:120px; }
#loading{ background-color:#eee; border:solid 1px #999; margin:5px 0 10px; padding:5px; font-size:13px; }
</style>
</head>
<body>
<div id="show"></div>
<button name="btnLoad">Load</button>
</body>
</html>

AjaxGlobalEvent.js 
$(document).ready(function(){
 $("#show").ajaxStart(function(){
  $(this).append("<p>Run ajaxStart</p>");
 });
 $("#show").ajaxStop(function(){
  $(this).append("<p>Run ajaxStop</p>");
 }); $("#show").ajaxComplete(function(){
  $(this).append("<p>Run ajaxComplete</p>");
 });
 $("#show").ajaxError(function(){
  $(this).append("<p>Run ajaxError</p>");
 });
 $("#show").ajaxSend(function(){
  $(this).append("<p>Run ajaxSend</p>");
 });
 $("#show").ajaxSuccess(function(){
  $(this).append("<p>Run ajaxSuccess</p>");
 });
 $("button[name='btnLoad']").click(function(){ 
  $.get("http://www.sohu.com");
 }); 
});

   jQuery之ajax技术的详细介绍
Javascript 相关文章推荐
window.location和document.location的区别分析
Dec 23 Javascript
js本身的局限性 别让javascript做太多事
Mar 23 Javascript
JavaScript中变量提升 Hoisting
Jul 03 Javascript
学习JavaScript正则表达式
Nov 13 Javascript
js模仿java的Map集合详解
Jan 06 Javascript
angular2使用简单介绍
Mar 01 Javascript
使用jquery提交form表单并自定义action的实现代码
May 25 Javascript
浅谈vue中慎用style的scoped属性
Nov 28 Javascript
Element实现表格分页数据选择+全选所有完善批量操作
Jun 07 Javascript
简单了解微信小程序 e.target与e.currentTarget的不同
Sep 27 Javascript
vue微信分享插件使用方法详解
Feb 18 Javascript
JavaScript实现世界各地时间显示
Sep 07 Javascript
jQuery之尺寸调整组件的深入解析
Jun 19 #Javascript
jQuery之排序组件的深入解析
Jun 19 #Javascript
jQuery之日期选择器的深入解析
Jun 19 #Javascript
jQuery之按钮组件的深入解析
Jun 19 #Javascript
jQuery之自动完成组件的深入解析
Jun 19 #Javascript
jQuery之折叠面板的深入解析
Jun 19 #Javascript
jQuery之选择组件的深入解析
Jun 19 #Javascript
You might like
解析php中eclipse 用空格替换 tab键
2013/06/24 PHP
PHP实现抓取HTTPS内容
2014/12/01 PHP
php+ajax+json 详解及实例代码
2016/12/12 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
TP3.2.3框架使用CKeditor编辑器在页面中上传图片的方法分析
2019/12/31 PHP
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
javascript密码强度校验代码(两种方法)
2015/08/10 Javascript
详解Document.Cookie
2015/12/25 Javascript
jQuery实现自动输入email、时间和域名的方法
2016/08/24 Javascript
微信js-sdk上传与下载图片接口用法示例
2016/10/12 Javascript
jQuery 插件封装的方法
2016/11/16 Javascript
Jquery Easyui日历组件Calender使用详解(23)
2016/12/18 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
vue数据双向绑定原理解析(get &amp; set)
2017/03/08 Javascript
WdatePicker.js时间日期插件的使用方法
2017/07/26 Javascript
vue-cli 首屏加载优化问题
2018/11/06 Javascript
防止Layui form表单重复提交的实现方法
2019/09/10 Javascript
用Python编写简单的定时器的方法
2015/05/02 Python
Python 如何访问外围作用域中的变量
2016/09/11 Python
Python操作Redis之设置key的过期时间实例代码
2018/01/25 Python
python实现多进程通信实例分析
2019/09/01 Python
python如何导出微信公众号文章方法详解
2020/08/31 Python
布局和排版教程 纯css3实现图片三角形排列
2014/10/17 HTML / CSS
CSS3标注引用的出处和来源的方法
2020/02/25 HTML / CSS
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
酒店司机岗位职责
2013/12/14 职场文书
好矿嫂事迹材料
2014/01/21 职场文书
咖啡蛋糕店创业计划书
2014/01/28 职场文书
《长城》教学反思
2014/02/14 职场文书
诚信承诺书范文
2014/03/27 职场文书
公共场所禁烟标语
2014/06/25 职场文书
检讨书1000字
2014/10/11 职场文书
交心谈心活动总结
2015/05/11 职场文书
电影建国大业观后感
2015/06/01 职场文书
2019年健身俱乐部的创业计划书
2019/08/26 职场文书
Nginx工作原理和优化总结。
2021/04/02 Servers