jQuery对Ajax的操作进行了封装。jQuery中\(.ajax()属于最底层的方法,这个放在后面说,首先看看封装了\).ajax()的方法。

load()方法

load()可以远程载入HTML并插入到DOM中。结构为:

  1. load(url [,data] [,callback])
  • url(String):服务端资源的url。
  • data(Obejct):发送到服务器的key/value数据
  • callback(Function):请求完成时(无论成功或失败)的回调函数,在响应数据已经加载到包装集元素之后被调用。传入这个函数的参数是响应文本、状态码、以及xhr实例。

加载HTML文档

首先构造一个要被load()方法加载的新闻评论页面,comment.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title>最新评论</title>
  6. </head>
  7. <body>
  8. <div class="comment">
  9. <p>
  10. <a href="#" class="username">张三</a>
  11. <span class="location">[北京市网友]</span>
  12. </p>
  13. <p class="contentTxt">一楼给度娘</p>
  14. </div>
  15. <div class="comment">
  16. <p>
  17. <a href="#" class="username">李四</a>
  18. <span class="location">[山东省济南市网友]</span>
  19. </p>
  20. <p class="contentTxt">没抢到沙发</p>
  21. </div>
  22. <div class="comment">
  23. <p>
  24. <a href="#" class="username">王五</a>
  25. <span class="location">[河南省郑州市网友]</span>
  26. </p>
  27. <p class="contentTxt">顶顶顶顶顶</p>
  28. </div>
  29. </body>
  30. </html>

然后创建load.html,添加一个button按钮触发Ajax事件,将加载进来的HTML内容存放到id为“resText”的元素中。

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script type="text/javascript" src="../jquery/jquery-2.2.3.js"></script>
  7. <script type="text/javascript">
  8. $(function () {
  9. // 点击按钮,触发加载动作
  10. $("#btn").click(function () {
  11. // 将comment.html加载进id为“resText”的元素里
  12. $("#resText").load("comment.html");
  13. });
  14. })
  15. </script>
  16. </head>
  17. <body>
  18. <input type="button" id="btn" value="load评论">
  19. <div>最新评论:</div>
  20. <div id="resText"></div>
  21. </body>
  22. </html>

load()的url参数的语法结构为“url selector”,可以加载指定的内容。例如,加载comment.html页面中class为“contentTxt”的内容:

  1. $("#resText").load("comment.html .contentTxt");

load()的传递方式根据参数data来自动指定。如果没有参数,则采用GET方式传递,否则,会自动转换为POST方式。

回调函数

在load方法中,无论ajax请求是否成功,请求完成(complete)后,回调函数就会被触发,对应$.ajax()中的complete回调函数。

  1. $("#resText").load("comment.html", function (responseText, textStatus, XMLHttpRequest) {
  2. alert(responseText); // 请求返回的内容
  3. alert(textStatus); // 请求状态
  4. alert(XMLHttpRequest); // XMLHttpRequest对象
  5. });

load()常用来从web服务器上获取静态的数据文件。如果要向服务器传递参数,可以使用\(.get()或\).post()方法。

\(.get()与\).post()

\(.get()使用GET进行异步请求。服务器的状态和应用的模型数据不受GET操作的影响。无论进行多少次GET操作,返回的结果是完全一致的。\).post()发送到服务器的数据可以用来修改应用的模型状态。例如,可以添加或删除信息。

$.get()

$.get()结构为:

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

$.get()参数说明:

  • url(String):请求的服务器端资源的url
  • data(Object):以key/value的形式构造查询字符串追加到url
  • callback(Function):在请求成功(success)时被调用。将请求结果和状态传递给该方法。
  • type(String):服务器端返回内容的格式

HTML文档

下面添加评论的html页面:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script type="text/javascript" src="../jquery/jquery-2.2.3.js"></script>
  7. <script type="text/javascript">
  8. $(function () {
  9. $("#send").click(function () {
  10. // 点击按钮触发get请求
  11. $.get("get1.jsp", {
  12. // 向服务器传递参数,encodeURI进行完整编码
  13. username: encodeURI($("#username").val()),
  14. location: encodeURI($("#location").val()),
  15. contentTxt: encodeURI($("#contentTxt").val())
  16. }, function (data, textStatus) {
  17. // alert(textStatus); // 返回请求状态
  18. // alert(decodeURI(data)); // 返回请求的状态
  19. // 将返回的数据添加到id为“resText”的元素中
  20. $("#resText").html(decodeURI(data));
  21. })
  22. });
  23. })
  24. </script>
  25. </head>
  26. <body>
  27. <form id="form1">
  28. <p>添加评论:</p>
  29. <p>姓名:<input type="text" name="username" id="username"></p>
  30. <p>位置:<input type="text" name="location" id="location"></p>
  31. <p>内容:<textarea name="contentTxt" id="contentTxt"></textarea></p>
  32. <p><input type="button" id="send" value="提交"></p>
  33. </form>
  34. <div>最新评论:</div>
  35. <div id="resText"></div>
  36. </body>
  37. </html>

接下来构造get1.jsp,模拟服务器处理请求并返回数据:

  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <%
  3. String username = request.getParameter("username");
  4. String location = request.getParameter("location");
  5. String content = request.getParameter("contentTxt");
  6. out.println("<div class='comment'><a href='#' class='username'>" + username + "</a><span class='location'>"+ location +
  7. "</span></p><p class='contentTxt'>"+content+"</p></div>");
  8. %>

然后需要将.jsp发布到tomcat等web容器进行访问。

JSON数据

相对于xml文件而言,json相当简洁、易读。接下来看看服务器返回json形式的数据的情况。

客户端页面get2.html:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
  5. <title></title>
  6. <script type="text/javascript" src="../jquery/jquery-2.2.3.js"></script>
  7. <script type="text/javascript">
  8. $(function () {
  9. $("#send").click(function () {
  10. $.get("get2.jsp", {
  11. username: encodeURI($("#username").val()),
  12. location: encodeURI($("#location").val()),
  13. contentTxt: encodeURI($("#contentTxt").val())
  14. }, function (data, textStatus) {
  15. alert(textStatus);
  16. var username = data.username;
  17. var location = data.location;
  18. var contentTxt = data.contentTxt;
  19. username = decodeURI(username);
  20. location = decodeURI(location);
  21. contentTxt = decodeURI(contentTxt);
  22. var txtHtml = "<div class='comment'><p><a href='#' class='username'>" + username +
  23. "</a><span class='location'>" + location +
  24. "</span></p><p class='contentTxt'>" + contentTxt + "</p></div>";
  25. $("#resText").html(txtHtml);// 将返回的数据添加到页面
  26. }, "json");
  27. })
  28. })
  29. </script>
  30. </head>
  31. <body>
  32. <form id="form1">
  33. <p>添加评论:</p>
  34. <p>姓名:<input type="text" name="username" id="username"></p>
  35. <p>位置:<input type="text" name="location" id="location"></p>
  36. <p>内容:<textarea name="contentTxt" id="contentTxt"></textarea></p>
  37. <p><input type="button" id="send" value="get提交"></p>
  38. </form>
  39. <div>最新评论:</div>
  40. <div id="resText"></div>
  41. </body>
  42. </html>

上面encodeURI()是用于编码,否则中文就无法解析,这个希望以后有时间再总结,这里先记住。回调函数的第4个参数(type)设置为“json”,代表期待服务器返回的数据格式。

需要添加json-lib.jar,用于构造json格式的数据。get2.jsp:

  1. <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
  2. <%@ page import="net.sf.json.JSONObject" %>
  3. <%
  4. String username = request.getParameter("username");
  5. String location = request.getParameter("location");
  6. String contentTxt = request.getParameter("contentTxt");
  7. JSONObject json = new JSONObject();
  8. json.put("username", username);
  9. json.put("location", location);
  10. json.put("contentTxt", contentTxt);
  11. out.println(json);
  12. %>

json的格式非常严格,任何一个括号的不匹配或缺失都会导致页面的脚本终止运行。上面通过java代码首先创建了一个json对象。如果通过拼接的方式构造json数据,必须是标准的json格式:

  1. out.println("{\"username\":\""+ username+ "\",\"location\":\"" + location + "\", \"contentTxt\":\""+ contentTxt+"\" }");

$.post()

除了对服务器的状态和应用的模型数据的影响,\(.get()和\).post()还有以下区别:

  • GET请求会将参数跟在url后进行传递,POST请求则作为HTTP消息的实体内容发送给Web服务器。在ajax中这种区别对用户是不可见的。
  • GET对传输的数据大小有限制(通常不大于2kb),使用POST方式传递的数据量比GET大得多(理论上不受限制)
  • GET方式请求的数据会被浏览器缓存,这种情况可能带来安全问题。

\(.get()和\).post()的结构和使用方式都相同。

\(.getScript()和\).getJson()

$.getScript()

$.getScript()用来加载.js文件,与加载一个HTML片段一样,js文件会自动执行。

将$.load()的comment.html页面改写为js文件,将评论添加到id为“resText”的元素中。js1.js:

  1. var comments = [
  2. {
  3. "username": "张三",
  4. "location": "[北京市网友]",
  5. "contentTxt": "一楼献度娘"
  6. },
  7. {
  8. "username": "李四",
  9. "location": "[山东省济南市网友]",
  10. "contentTxt": "没抢到沙发"
  11. },
  12. {
  13. "username": "王五",
  14. "location": "[河南省郑州市网友]",
  15. "contentTxt": "顶顶顶顶顶"
  16. }
  17. ];
  18. var html = '';
  19. $.each(comments, function (index, comment) {
  20. html += "<div class='comment'><a href='#' class='username'>" + comment['username'] +
  21. "</a><span class='location'>" + comment['location'] +
  22. "</span></p><p class='contentTxt'>" + comment['contentTxt'] + "</p></div>";
  23. });
  24. $("#resText").html(html);

$.getScript()直接加载进js,并自动执行:

  1. <!DOCTYPE html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="UTF-8">
  5. <title></title>
  6. <script type="text/javascript" src="../jquery/jquery-2.2.3.js"></script>
  7. <script type="text/javascript">
  8. $(function () {
  9. // 点击按钮加载js1.js文件
  10. $("#send").click(function () {
  11. $.getScript("js1.js");
  12. })
  13. })
  14. </script>
  15. </head>
  16. <body>
  17. <p>
  18. <input type="button" id="send" value="加载script">
  19. </p>
  20. <div class="comment">最新评论:</div>
  21. <div id="resText"></div>
  22. </body>
  23. </html>

$.getJSON()

\(.getJSON()用于加载JSON文件,用法与\).getScript()相同。

json数据:

  1. [
  2. {
  3. "username": "张三",
  4. "location": "[北京市网友]",
  5. "contentTxt": "一楼献度娘"
  6. },
  7. {
  8. "username": "李四",
  9. "location": "[山东省济南市网友]",
  10. "contentTxt": "没抢到沙发"
  11. },
  12. {
  13. "username": "王五",
  14. "location": "[河南省郑州市网友]",
  15. "contentTxt": "顶顶顶顶顶"
  16. }
  17. ]

jquery代码:

  1. $(function () {
  2. $("#send").click(function () {
  3. $.getJSON("demo.json", function (data) {
  4. $("#resText").empty();
  5. var html = '';
  6. $.each(data, function (index, comment) {
  7. html += "<div class='comment'><a href='#' class='username'>" + comment['username'] +
  8. "</a><span class='location'>" + comment['location'] +
  9. "</span></p><p class='contentTxt'>" + comment['contentTxt'] + "</p></div>";
  10. });
  11. $("#resText").html(html);
  12. });
  13. })
  14. });

$.ajax()方法

$.ajax()是jquery最底层的实现。

  1. $.ajax(options)

这个方法只包含了1个参数,这个参数里面包含了$.ajax()所需要的请求设置以及回调函数,参数以key/value形式存在

$.ajax()参数说明:

  • url(String):发送请求地址。

  • type(String):请求方式(POST或GET),默认为GET。其他HTTP请求方法如PUT、DELETE,仅部分浏览器支持。

  • data(Object或String):发送到服务器的数据。如果不是字符串,将自动转换为字符串格式。GET请求中将附加在url后。对象必须是key/value格式,例如{id:"xxyh", password:"123456"}转换为&id=xxyh&password=123456。如果是数组,将自动为不同值对应同一个名称。例如{name:["xxyh","dudu"]}转换为&name=xxyh&name=dudu。

  • dataType(String):预期服务器返回的数据类型。如果不指定,jquery将根据HTTP包MINE信息返回responseXML或responseText,并作为回调函数参数传递。可用类型:

    • xml:返回XML文档,可用jquery处理
    • html:返回纯文本HTML信息,包含的script标签会插入DOM时执行。
    • script:返回纯文本JavaScript代码。如果没有设置cache参数,不会自动缓存结果。在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。
    • json:返回JSON数据。
    • jsonp:JSONP格式。使用JSONP形式调用函数时,例如myurl?callback=?,jquery将自动替换后一个“?”为正确的函数名,以执行回调函数。
    • text:返回纯文本字符串。
  • complete(Function):请求完成后回调函数(请求成功或失败后均调用)。

    参数:XMLHttpRequest对象和一个描述成功请求类型的字符串。

    1. function(XMLHttpRequest,textStatus){
    2. this; // 调用本次Ajax请求时传递的options参数
    3. }
  • success(Function):请求成功回调函数。有2个参数:

    参数:由服务器返回,并根据dataType参数进行处理后的数据描述状态的字符串

    1. function(data, textStatus) {
    2. // data 可能是xmlDoc,jsonObj,html,text等
    3. this; // 调用本次Ajax请求时传递的options参数
    4. }
  • error(Function):请求失败时被调用的函数。这个函数有3个参数,即XMLHttpRequest对象、错误信息和捕获的错误对象

    1. function(XMLHttpRequest, textStatus, errorThrown){
    2. // 通常情况下textStatus和errorThrown只有一个包含信息
    3. this; // 调用本次Ajax请求时传递的options参数
    4. }
  • contentType(String):当发送信息至服务器时,内容编码类型默认为"application/x-www-form-urlencoded"。

  • jsonp(String):在一个jsonp请求中重写回调函数的名字。用来替代在“callback=?”这种GET或POST请求中URL参数里的“callback”部分,例如{jsonp:'onJsonPLoad'}会导致将“onJsonPLoad=?”传给服务器。

获取JSON数据

接下来通过$.ajax()获取json数据。jquery代码:

  1. $(function () {
  2. $("#send").click(function () {
  3. $.ajax({
  4. type:"GET",
  5. url:"demo.json",
  6. dataType:"json",
  7. success: function (data) {
  8. $("#resText").empty();
  9. var html = "";
  10. $.each(data, function (commentIndex, comment) {
  11. html += "<div class='comment'><a href='#' class='username'>" + comment['username'] +
  12. "</a><span class='location'>" + comment['location'] +
  13. "</span></p><p class='contentTxt'>" + comment['contentTxt'] + "</p></div>";
  14. });
  15. $("#resText").html(html);
  16. }
  17. })
  18. });
  19. })

jQuery Ajax总结的更多相关文章

  1. IE8/9 JQuery.Ajax 上传文件无效

    IE8/9 JQuery.Ajax 上传文件有两个限制: 使用 JQuery.Ajax 无法上传文件(因为无法使用 FormData,FormData 是 HTML5 的一个特性,IE8/9 不支持) ...

  2. jquery ajax解析

    jQuery确实是一个挺好的轻量级的JS框架,能帮助我们快速的开发JS应用,并在一定程度上改变了我们写JavaScript代码的习惯. 废话少说,直接进入正题,我们先来看一些简单的方法,这些方法都是对 ...

  3. jQuery.ajax 根据不同的Content-Type做出不同的响应

    使用H5+ASP.NET General Handler开发项目,使用ajax进行前后端的通讯.有一个场景需求是根据服务器返回的不同数据类型,前端进行不同的响应,这里记录下如何使用$.ajax实现该需 ...

  4. jQuery.ajax(url,[settings])

    概述 通过 HTTP 请求加载远程数据. jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XMLHttpRequest 对象. ...

  5. jQuery Ajax 实例 ($.ajax、$.post、$.get)

    jQuery Ajax 实例 ($.ajax.$.post.$.get) 转 Jquery在异步提交方面封装的很好,直接用AJAX非常麻烦,Jquery大大简化了我们的操作,不用考虑浏览器的诧异了. ...

  6. jQuery Ajax传值给Servlet,在Servlet里Get接受参数乱码的解决方法

    最近在学jquery ui,在做一个小功能的时候需要将前台的值获取到,通过Ajax传递给Servlet,然后再在返回数据结果,但是在Servlet接受参数的时候,通过后台打印,发现接受乱码,代码示例如 ...

  7. JQuery+Ajax+Struts2+Hibernate 实现完整的登录注册

    写在最前: 下午有招聘会,不想去,总觉得没有准备好,而且都是一些不对口的公司,可是又静不下心来,就来写个博客. 最近在仿造一个书城的网站:http://www.yousuu.com ,UI直接拿来用, ...

  8. 用.NET MVC实现长轮询,与jQuery.AJAX即时双向通信

    两周前用长轮询做了一个Chat,并移植到了Azure,还写了篇博客http://www.cnblogs.com/indream/p/3187540.html,让大家帮忙测试. 首先感谢300位注册用户 ...

  9. jQuery AJAX 网页无刷新上传示例

    新年礼,提供简单.易套用的 jQuery AJAX 上传示例及代码下载.后台对文件的上传及检查,以 C#/.NET Handler 处理 (可视需要改写成 Java 或 PHP). 有时做一个网站项目 ...

  10. 用JQuery Ajax 与一般处理程序 请求数据无刷新,以及如何调试错误

    通过 ajax() 与 一般处理程序,请求数据库数据,实现界面无刷新. Jquery ajax 请求参数详细说明 http://www.w3school.com.cn/jquery/ajax_ajax ...

随机推荐

  1. python学习笔记(四)— 函数

    一.函数是什么? 函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,编程中的函数在英文中也有很多不同的叫法.在BASIC中叫做subroutine(子过程或子程序),在Pasc ...

  2. Linux时间管理涉及数据结构和传统低分辨率时钟的实现

    上篇文章大致描述了Linux时间管理的基本情况,看了一些大牛们的博客感觉自己写的内容很匮乏,但是没办法,只能通过这种方式提升自己……闲话不说,本节介绍下时间管理下重要的数据结构 设备相关数据结构 // ...

  3. 分类,logistic回归

    1. 使用回归进行分类 机器学习中分类是指输入一个样本点,输出这个样本点所属的类别,预测的是一个离散值,如类别(1,2). 而回归问题是输入一个样本点,预测一个值,这个值是连续值,可以介于\([1,2 ...

  4. Linux ls命令

    ls:即列表List的意思,用来列出目录下的文件用来列出给定目录下的文件,参数为空默认列出当前目录下的文件. 用法是:ls [选项] [目录] 常用的选项有 -a, –all 列出目录下的所有文件,包 ...

  5. yum install mysql on centos 6.5 zz

    http://www.cnblogs.com/xiaoluo501395377/archive/2013/04/07/3003278.html 1.使用yum命令进行mysql的安装 yum list ...

  6. 消息编解码Nanopb - protocol buffers

    Google Protocol Buffer 有各种版本的代码包,Python C/C++.JAVA.C.OBJ-C..NET等,嵌入式设备中使用的protobuf版本,我们选择的是nanoprobu ...

  7. python练习题(持续更新中。。。。。)

    1.检验注册用户是否合法:需要输入用户名,校验用户名是否被注册,如已注册,提示已经注册过,没注册就可以注册:用户名不能为空:用户名长度必须在6-13位之间:最多只能输入三次. users = ['aa ...

  8. 数据结构-平衡二叉树 旋转过程平衡因子分析 c和java代码实现对比

    平衡二叉搜索树(Self-balancing binary search tree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且 ...

  9. jmeter接口测试实战

    请求方法:get/post 接口请求地址:http://172.22.24.26:8080/fundhouse/external/getdata?name=xxxx &fund_udid=35 ...

  10. 『NiFi 学习之路』把握 —— 架构及主要部件

    一.概述 通过前面几篇文章的学习,相信你对 NiFi 有了一个基础性的了解. 数据处理和分发系统 是什么概念? NiFi 系统中数据的传递方式是怎样的? NiFi 的重要 Processor 有哪些? ...