在JavaScript的jQuery库中操作AJAX的方法讲解


Posted in Javascript onAugust 15, 2015

Java软件开发中,后台中我们可以通过各种框架,像SSH等进行对代码的封装,方便我们对Java代码的编写,例如,Struts,SpringMVC对从前台到action的流程进行封装控制,使我们只需要进行一些简单配置就可以实现;而Spring进行了对各种对象的管理进行封装,提供了AOP编程的方式,大大方便了我们;而Hibernate和IBatis则是对JDBC代码进行封装,不需要我们每次都写那些重复而繁杂的JDBC代码。
 
前台呢,对于页面一些效果,验证等,我们都是通过JavaScript语言进行完成的,但是它也就像我们的Java代码一样,是最前台语言最基础的,而JQuery则是对js代码进行封装方便我们前台代码的编写,而且它还有一个非常大的优势就是解决了浏览器的兼容问题,这也是我们使用它非常重要的原因之一。
 
而现在为了满足用户的需求,Ajax(Asynchronous Javascript + XML)异步刷新起到了无可比拟的作用,以前写Ajax操作,总是需要我们想JDBC代码一样进行几个必备的步骤:
AJAX——核心XMLHttpRequest对象,而JQuery也对Ajax异步操作进行了封装,这里看一下几种常用的方式。 $.ajax,$.post, $.get, $.getJSON。

$.ajax,这个是JQuery对ajax封装的最基础步,通过使用这个函数可以完成异步通讯的所有功能。也就是说什么情况下我们都可以通过此方法进行异步刷新的操作。但是它的参数较多,有的时候可能会麻烦一些。看一下常用的参数:      

var configObj = {
    method  //数据的提交方式:get和post
    url  //数据的提交路劲
    async  //是否支持异步刷新,默认是true
    data  //需要提交的数据
    dataType  //服务器返回数据的类型,例如xml,String,Json等
    success  //请求成功后的回调函数
    error  //请求失败后的回调函数
  }
 
$.ajax(configObj);//通过$.ajax函数进行调用。

 
           好,看一个实际的例子吧,看一个进行异步删除的例子:

Java软件开发中,后台中我们可以通过各种框架,像SSH等进行对代码的封装,方便我们对Java代码的编写,例如,Struts,SpringMVC对从前台到action的流程进行封装控制,使我们只需要进行一些简单配置就可以实现;而Spring进行了对各种对象的管理进行封装,提供了AOP编程的方式,大大方便了我们;而Hibernate和IBatis则是对JDBC代码进行封装,不需要我们每次都写那些重复而繁杂的JDBC代码。
 
前台呢,对于页面一些效果,验证等,我们都是通过JavaScript语言进行完成的,但是它也就像我们的Java代码一样,是最前台语言最基础的,而JQuery则是对js代码进行封装方便我们前台代码的编写,而且它还有一个非常大的优势就是解决了浏览器的兼容问题,这也是我们使用它非常重要的原因之一。
 
而现在为了满足用户的需求,Ajax(Asynchronous Javascript + XML)异步刷新起到了无可比拟的作用,以前写Ajax操作,总是需要我们想JDBC代码一样进行几个必备的步骤:
AJAX——核心XMLHttpRequest对象,而JQuery也对Ajax异步操作进行了封装,这里看一下几种常用的方式。 $.ajax,$.post, $.get, $.getJSON。
 
$.ajax,这个是JQuery对ajax封装的最基础步,通过使用这个函数可以完成异步通讯的所有功能。也就是说什么情况下我们都可以通过此方法进行异步刷新的操作。但是它的参数较多,有的时候可能会麻烦一些。看一下常用的参数:      

var configObj = {
    method  //数据的提交方式:get和post
    url  //数据的提交路劲
    async  //是否支持异步刷新,默认是true
    data  //需要提交的数据
    dataType  //服务器返回数据的类型,例如xml,String,Json等
    success  //请求成功后的回调函数
    error  //请求失败后的回调函数
  }
 
$.ajax(configObj);//通过$.ajax函数进行调用。

 
好,看一个实际的例子吧,看一个进行异步删除的例子:

<span style="font-size:18px;">     // 删除 
        $.ajax({ 
          type : "POST", //提交方式 
          url : "${pageContext.request.contextPath}/org/doDelete.action",//路径 
          data : { 
            "org.id" : "${org.id}" 
          },//数据,这里使用的是Json格式进行传输 
          success : function(result) {//返回数据根据结果进行相应的处理 
            if ( result.success ) { 
              $("#tipMsg").text("删除数据成功"); 
              tree.deleteItem("${org.id}", true); 
            } else { 
              $("#tipMsg").text("删除数据失败"); 
            } 
          } 
        }); 
</span>

$.post,这个函数其实就是对$.ajax进行了更进一步的封装,减少了参数,简化了操作,但是运用的范围更小了。$.post简化了数据提交方式,只能采用POST方式提交。只能是异步访问服务器,不能同步访问,不能进行错误处理。在满足这些情况下,我们可以使用这个函数来方便我们的编程,它的主要几个参数,像method,async等进行了默认设置,我们不可以改变的。例子不再介绍。
url:发送请求地址。
data:待发送 Key/value 参数。
callback:发送成功时回调函数。
type:返回内容格式,xml, html, script, json, text,_default。
 
$.get,和$.post一样,这个函数是对get方法的提交数据进行封装,只能使用在get提交数据解决异步刷新的方式上,使用方式和上边的也差不多。这里不再演示。
 
$.getJSON,这个是进一步的封装,也就是对返回数据类型为Json进行操作。里边就三个参数,需要我们设置,非常简单:url,[data],[callback]。
 
其实会了$.ajax方法,其它的就都会使用了,都是一样的,其实非常简单。
 
但是这里还有一个问题,比较麻烦,就是如果页面数据量比较大,该怎么办呢?在常规表单的处理中,我们使用框架Struts2可以通过域驱动模式进行自动获取封装,那么通过ajax,如何进行封装呢?这里JQuery有一个插件,Jquery Form,通过引入此js文件,我们可以模仿表单Form来支持Struts2的域驱动模式,进行自动数据的封装。用法和$.ajax类似,看一下实际的例子,这里写一个保存用户的前台代码:
 

<span style="font-size:18px;"> $(function(){ 
    var options = { 
      beforeSubmit : function() {//处理以前需要做的功能 
        $("tipMsg").text("数据正在保存,请稍候..."); 
        $("#insertBtn").attr("disabled", true); 
      }, 
      success : function(result) {//返回成功以后需要的回调函数 
        if ( result.success ) { 
          $("#tipMsg").text("机构保存成功"); 
                   
                    //这里是对应的一棵树,后边会介绍到, 
          // 控制树形组件,增加新的节点 
          var tree = window.parent.treeFrame.tree; 
          tree.insertNewChild("${org.id}", result.id, result.name); 
        } else { 
          $("#tipMsg").text("机构保存失败"); 
        } 
        // 启用保存按钮 
        $("#insertBtn").attr("disabled", false); 
      }, 
      clearForm : true 
    }; 
   
    $('#orgForm').ajaxForm(options); //通过Jquery.Form中的ajaxForm方法进行提交 
  }); 
</span>

这样我们就不用再进行数据data的封装处理,大大简化了我们ajax的操作这样异步刷新的操作。综上为JQuery中ajax的操作,感觉使用多了,和form表单的处理还是非常相似的,只不过实现的功能不一样罢了。学习编程,其实就是学习对数据的流转处理,如何从前台获取,传输到服务器进行相应的处理,然后返回,进行相关的显示,把这个流程通过一些技术实现,就完成了软件的开发,感觉还是非常有意思的。

利用 jQuery 简化 Ajax 开发

Ajax 并不是一种语言,它只是几种旧技术如 JavaScript 和 XML 以及 DOM 的综合应用,全称为 Asynchronous JavaScript and XML,即 异步 JavaScript 和 XML ,它能够在页面不刷新的前提下和服务器进行异步数据交互,如果运用得当,它能够很好的提高用户体验,还能节省带宽、降低服务器压力。作为一个优秀的 JavaScript 框架,jQuery 同样也提供了很多方法来处理 Ajax 的相关操作。
利用 Ajax 获取异步数据

传统 Ajax 一般步骤为:

  •     创建 XMLHttpRequest(需兼容各种浏览器)。
  •     向服务器发送 XMLHttpRequest 请求。
  •     监测 XMLHttpRequest 的 onreadystatechange 事件。
  •     判断服务端是否响应完成及响应结果是否正常。
  •     获取 Ajax 从服务端返回的结果。

例如用 Ajax 获取服务器上的当前时间,示例代码如下:

<html>
<head>
<title>Traditional Ajax</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 
<script type="text/javascript">
function getDateTime() { 
 var xmlHttp;
 if (window.XMLHttpRequest) {
 // For IE7+, Firefox, Chrome, Opera, Safari
 xmlHttp = new XMLHttpRequest();
 } else if (window.ActiveXObject) {
 // For IE6, IE5
 xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
 }
 xmlHttp.onreadystatechange = function() {
 if (xmlHttp.readyState == 4 && xmlHttp.status == 200) {
  document.getElementById("timediv").innerHTML = "现在时间" + xmlHttp.responseText;
 }
 }
 xmlHttp.open("GET", "ajax.php", true);
 xmlHttp.send(null);
}
</script>
</head>
<body>
 <div id="timediv">现在时间</div>
 <br /><input type="button" value="测试传统的 Ajax" onClick="getDateTime()" />
</body>
</html>

服务端代码为:

<?php
 //服务器端为格林尼治标准时间,这里需设置为中国所在时区
 date_default_timezone_set("PRC");
 echo date("Y-m-d H:i:s");
?>

可以看到,仅仅实现如此简单的功能,代码却如此冗长,特别是创建 XMLHttpRequest 的时候,还要兼容多种浏览器,另外还要监测 XMLHttpRequest 的 onreadystatechange 时间,以及返回的 readyState 和 status 状态,稍显麻烦。

jQuery 的 Ajax 方法,如果将上面的代码改写为 jQuery 的 Ajax 方法,代码如下:

<html>
<head>
<title>Traditional Ajax</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js?ver=1.4.4"></script>
<script type="text/javascript">
function getDateTime() {
 $("#timediv").load("ajax.php");
}
</script>
</head>
<body>
 <div id="timediv"></div>
 <br /><input type="button" value="测试 jQuery 的 Ajax" onClick="getDateTime()" />
</body>
</html>

可以看到,jQuery 的 Ajax 方法,主要代码只有一行 $("#timediv").load("ajax.php");,相当之简单,而且绝对兼容各种主流浏览器。从这个例子可以看出,jQuery 大大的简化了 Ajax 的编码方式。
GET 还是 POST ?

上面的例子中的 load 函数固然方便,但是我们还是经常要指定 jQuery 到底是用 GET 方法还是 POST 方法,使用方法如下:

$.get(url, [data], [callback])
  $.post(url, [data], [callback], [type])

GET 和 POST 的使用方法基本相同,参数 data 为向服务器发送的数据,callback 为回调函数,type 用来指定服务器返回的数据类型,如纯文本、XML、JSON 等。

下面来看具体例子:

<html>
<head>
<title>jQuery Ajax (get and post)</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js?ver=1.4.4"></script>
<script type="text/javascript">
$(document).ready(function() {
 // 为 GET 按钮添加事件
 $("#getbtn").click(function() {
 $.get("ajaxpage.php", {username:$("#username").val()}, function(data) {
  $("#ajaxdata").html(data); // 将服务端返回的数据填充到 P 标签中
 });
 });
 
 // 为 POST 按钮添加事件
 $("#postbtn").click(function() {
 $.post("ajaxpage.php", {username:$("#username").val()}, function(data) {
  $("#ajaxdata").html(data); // 将服务端返回的数据填充到 P 标签中
 });
 });
});
</script>
</head>
<body>
 你的大名:<input type="text" id="username" /><br />
 <input type="button" id="getbtn" value="GET 方法" /><br />
 <input type="button" id="postbtn" value="POST 方法" />
 <p id="ajaxdata"></p>
</body>
</html>

服务端代码为:

<?php
 // 服务器端为格林尼治标准时间,这里需设置为中国所在时区
 date_default_timezone_set("PRC");

 $username = "";
 $ajaxMethod = "";
 
 // 判断是 GET 还是 POST
 if(isset($_GET["username"])) {
 $username = $_GET["username"];
 $ajaxMethod = "GET";
 } else {
 $username = $_POST["username"];
 $ajaxMethod = "POST";
 }

 echo "你好," . $username . ", 现在时间为:" . date("Y-m-d H:i:s"). ",此数据来源于 " . $ajaxMethod . " Ajax";
?>

可以看到,jQuery Ajax 的 GET 方法 和 POST 方法,使用起来依然相当之方便。
控制 Ajax

GET 和 POST 方法以及前面提到的 load 方法,使用起来虽然十分实用,但是某些时候却过于简单,很多时候我们都需要更多的控制 Ajax 的细节,jQuery 同样提供了一些方法来控制 Ajax 的细节,主要通过 $.ajax(options) 方法来实现,请看下面的代码片段:

<script type="text/javascript">
$(document).ready(function() {
 // 为 GET 按钮添加事件
 $("#getbtn").click(function() {
 $.ajax({
  type: "GET",
  url: "ajaxpage.php",
  data: {username:$("#username").val()},
  timeout: 3000,
  error: function() {
  alert("error!");
  },
  success: function(data) {
  // 回调函数,将返回的数据添加到 P 标签中
  $("#ajaxdata").html(data);
  }
 });
 });
 
 // 为 POST 按钮添加事件
 $("#postbtn").click(function() {
 $.ajax({
  type: "POST", // Ajax 提交方式
  url: "ajaxpage.php", // 提交页
  data: {username:$("#username").val()}, // 要提交的数据
  timeout: 3000, // 超时设置,单位为毫秒
  error: function() { // Ajax 发生错误时
  alert("error!");
  },
  success: function(data) {
  // 回调函数,将返回的数据添加到 P 标签中
  $("#ajaxdata").html(data);
  }
 });
 });
});
</script>

上面例子中,$.ajax(options) 中的 options 条目是可选的,并不是每个参数都要设置。对于有些参数而言,例如 timeout 和 error 在某个项目中是固定不变的,那么就没必要在每个 Ajax 代码中都写,可以用 jQuery 提供的全局 Ajax 设置的方法来设置一下,设置方法如下:

<script type="text/javascript">
$(document).ready(function() {
 // 全局 Ajax 设定,这里的设置将对本页面所有 Ajax 方法适用
 $.ajaxSetup({
 url: "ajaxpage.php", // Ajax 提交页
 timeout: 3000, // 超时设置,单位为毫秒
 error: function() { // Ajax 发生错误时
  alert("error!");
 }
 });
 
 // 为 GET 按钮添加事件
 $("#getbtn").click(function() {
 $.ajax({
  type: "GET",
  data: {username:$("#username").val()},
  success: function(data) {
  // 回调函数,将返回的数据添加到 P 标签中
  $("#ajaxdata").html(data);
  }
 });
 });
 
 // 为 POST 按钮添加事件
 $("#postbtn").click(function() {
 $.ajax({
  type: "POST", // Ajax 提交方式
  data: {username:$("#username").val()}, // 要提交的数据
  success: function(data) {
  // 回调函数,将返回的数据添加到 P 标签中
  $("#ajaxdata").html(data);
  }
 });
 });
});
</script>

上面例子中,在全局设定里面设置好了的参数,在整个页面中都会生效,这个功能可以大大的减少重复的代码。

以上这些就是 jQuery Ajax 的几种简单使用方式,而且上面的几个例子中服务器返回的数据都是纯文本,如果是在复杂的 Ajax 应用中,可能就需要用到 XML 或者 JSON 了。
      

Javascript 相关文章推荐
用jquery与css打造个性化的单选框和复选框
Oct 20 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
Oct 10 Javascript
JS特权方法定义作用以及与公有方法的区别
Mar 18 Javascript
JavaScript实现删除,移动和复制文件的方法
Aug 05 Javascript
JS实现下拉菜单赋值到文本框的方法
Aug 18 Javascript
jQuery实现垂直半透明手风琴特效代码分享
Aug 21 Javascript
Jquery组件easyUi实现表单验证示例
Aug 23 Javascript
JS高级运动实例分析
Dec 20 Javascript
jQuery输入框密码的显示隐藏【代码分享】
Apr 29 jQuery
vue如何将v-for中的表格导出来
May 07 Javascript
vue router 跳转时打开新页面的示例方法
Jul 28 Javascript
js使用文档就绪函数动态改变页面内容示例【innerHTML、innerText】
Nov 07 Javascript
在jQuery中处理XML数据的大致方法
Aug 14 #Javascript
JavaScript中var关键字的使用详解
Aug 14 #Javascript
JavaScript的jQuery库中ready方法的学习教程
Aug 14 #Javascript
js实现当复选框选择匿名登录时隐藏登录框效果
Aug 14 #Javascript
JavaScript学习笔记之DOM基础 2.4
Aug 14 #Javascript
关于JavaScript的变量的数据类型的判断方法
Aug 14 #Javascript
js实现表单检测及表单提示的方法
Aug 14 #Javascript
You might like
php实现cc攻击防御和防止快速刷新页面示例
2014/02/13 PHP
PHP读取大文件的几种方法介绍
2016/10/27 PHP
PHP7下协程的实现方法详解
2017/12/17 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
JavaScript中使用正则匹配多条,且获取每条中的分组数据
2010/11/30 Javascript
简短几句 通俗解释javascript的闭包
2011/01/17 Javascript
Js日期选择自动填充到输入框(界面漂亮兼容火狐)
2013/08/02 Javascript
extjs两个tbar问题探讨
2013/08/08 Javascript
自动设置iframe大小的jQuery代码
2013/09/11 Javascript
jQuery Ajax异步处理Json数据详解
2013/11/05 Javascript
浅谈JavaScript的Polymer框架中的behaviors对象
2015/07/29 Javascript
jquery图片倾斜层叠切换特效代码分享
2015/08/27 Javascript
jQuery实现进度条效果代码
2015/12/17 Javascript
1秒50万字!js实现关键词匹配
2016/08/01 Javascript
vue.js树形组件之删除双击增加分支实例代码
2017/02/28 Javascript
vue.js数据绑定操作详解
2018/04/23 Javascript
React全家桶环境搭建过程详解
2018/05/18 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
Vue全局loading及错误提示的思路与实现
2019/08/09 Javascript
js blob类型url的视频下载问题的解决
2019/11/29 Javascript
微信小程序scroll-view锚点链接滚动跳转功能
2019/12/12 Javascript
如何在微信小程序中存setStorage
2019/12/13 Javascript
Vue简单封装axios之解决post请求后端接收不到参数问题
2020/02/16 Javascript
ES11新增的这9个新特性,你都掌握了吗
2020/10/15 Javascript
使用Python中的线程进行网络编程的入门教程
2015/04/15 Python
对python模块中多个类的用法详解
2019/01/10 Python
完美解决Python matplotlib绘图时汉字显示不正常的问题
2019/01/29 Python
spark dataframe 将一列展开,把该列所有值都变成新列的方法
2019/01/29 Python
Python3.7 dataclass使用指南小结
2019/02/22 Python
Django中自定义查询对象的具体使用
2019/10/13 Python
Django自带的加密算法及加密模块详解
2019/12/03 Python
python能做哪些生活有趣的事情
2020/09/09 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
Lookfantastic法国官网:英国知名美妆购物网站
2017/10/28 全球购物
厨师个人自我鉴定范文
2014/04/19 职场文书
JS前端轻量fabric.js系列之画布初始化
2022/08/05 Javascript