jQuery Ajax总结

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

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

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

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

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title>最新评论</title>
</head>
<body>
    <div class="comment">
        <p>
            <a href="#" class="username">张三</a>
            <span class="location">[北京市网友]</span>
        </p>

        <p class="contentTxt">一楼给度娘</p>
    </div>

    <div class="comment">
        <p>
            <a href="#" class="username">李四</a>
            <span class="location">[山东省济南市网友]</span>
        </p>

        <p class="contentTxt">没抢到沙发</p>
    </div>

    <div class="comment">
        <p>
            <a href="#" class="username">王五</a>
            <span class="location">[河南省郑州市网友]</span>
        </p>

        <p class="contentTxt">顶顶顶顶顶</p>
    </div>
</body>
</html>

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

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="../jquery/jquery-2.2.3.js"></script>
    <script type="text/javascript"> $(function () { // 点击按钮,触发加载动作 $("#btn").click(function () { // 将comment.html加载进id为“resText”的元素里 $("#resText").load("comment.html"); }); }) </script>
</head>
<body>
    <input type="button" id="btn" value="load评论">
    <div>最新评论:</div>
    <div id="resText"></div>
</body>
</html>

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

$(“#resText”).load(“comment.html .contentTxt”);
load()的传递方式根据参数data来自动指定。如果没有参数,则采用GET方式传递,否则,会自动转换为POST方式。

回调函数

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

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

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

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

$.get()

$.get()结构为:

$.get(url [,callback] [,type])
$.get()参数说明:

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

下面添加评论的html页面:

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="../jquery/jquery-2.2.3.js"></script>
    <script type="text/javascript"> $(function () { $("#send").click(function () { // 点击按钮触发get请求 $.get("get1.jsp",{ // 向服务器传递参数,encodeURI进行完整编码 username: encodeURI($("#username").val()),location: encodeURI($("#location").val()),contentTxt: encodeURI($("#contentTxt").val()) },function (data,textStatus) { // alert(textStatus); // 返回请求状态 // alert(decodeURI(data)); // 返回请求的状态 // 将返回的数据添加到id为“resText”的元素中 $("#resText").html(decodeURI(data)); }) }); }) </script>
</head>
<body>
<form id="form1">
    <p>添加评论:</p>

    <p>姓名:<input type="text" name="username" id="username"></p>

    <p>位置:<input type="text" name="location" id="location"></p>

    <p>内容:<textarea name="contentTxt" id="contentTxt"></textarea></p>

    <p><input type="button" id="send" value="提交"></p>

</form>
<div>最新评论:</div>
<div id="resText"></div>
</body>
</html>

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

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

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

JSON数据

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

客户端页面get2.html:

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript" src="../jquery/jquery-2.2.3.js"></script>
    <script type="text/javascript"> $(function () { $("#send").click(function () { $.get("get2.jsp",{ username: encodeURI($("#username").val()),textStatus) { alert(textStatus); var username = data.username; var location = data.location; var contentTxt = data.contentTxt; username = decodeURI(username); location = decodeURI(location); contentTxt = decodeURI(contentTxt); var txtHtml = "<div class='comment'><p><a href='#' class='username'>" + username + "</a><span class='location'>" + location + "</span></p><p class='contentTxt'>" + contentTxt + "</p></div>"; $("#resText").html(txtHtml);// 将返回的数据添加到页面 },"json"); }) }) </script>
</head>
<body>
<form id="form1">
    <p>添加评论:</p>

    <p>姓名:<input type="text" name="username" id="username"></p>

    <p>位置:<input type="text" name="location" id="location"></p>

    <p>内容:<textarea name="contentTxt" id="contentTxt"></textarea></p>

    <p><input type="button" id="send" value="get提交"></p>

</form>
<div>最新评论:</div>
<div id="resText"></div>
</body>
</html>

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

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

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<%@ page import="net.sf.json.JSONObject" %>
<% String username = request.getParameter("username"); String location = request.getParameter("location"); String contentTxt = request.getParameter("contentTxt"); JSONObject json = new JSONObject(); json.put("username",username); json.put("location",location); json.put("contentTxt",contentTxt); out.println(json); %>

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

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()
$.getScirpt()

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

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

var comments = [
    {
        "username": "张三","location": "[北京市网友]","contentTxt": "一楼献度娘"
    },{
        "username": "李四","location": "[山东省济南市网友]","contentTxt": "没抢到沙发"
    },{
        "username": "王五","location": "[河南省郑州市网友]","contentTxt": "顶顶顶顶顶"
    }
];

var html = '';

$.each(comments,function (index,comment) {
    html += "<div class='comment'><a href='#' class='username'>" + comment['username'] +
        "</a><span class='location'>" + comment['location'] +
        "</span></p><p class='contentTxt'>" + comment['contentTxt'] + "</p></div>";
});

$("#resText").html(html);
$.getScript()直接加载进js,并自动执行:

<!DOCTYPE html>
<html lang="en">
<head>
    <Meta charset="UTF-8">
    <title></title>
    <script type="text/javascript" src="../jquery/jquery-2.2.3.js"></script>
    <script type="text/javascript"> $(function () { // 点击按钮加载js1.js文件 $("#send").click(function () { $.getScript("js1.js"); }) }) </script>
</head>
<body>

    <p>
        <input type="button" id="send" value="加载script">
    </p>

    <div class="comment">最新评论:</div>
    <div id="resText"></div>
</body>
</html>

$.getJSON()

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

json数据:

[
  {
    "username": "张三","location": "[北京市网友]","contentTxt": "一楼献度娘"
  },{
    "username": "李四","location": "[山东省济南市网友]","contentTxt": "没抢到沙发"
  },{
    "username": "王五","location": "[河南省郑州市网友]","contentTxt": "顶顶顶顶顶"
  }
]
jquery代码:

$(function () {
    $("#send").click(function () {
        $.getJSON("demo.json",function (data) {
            $("#resText").empty();
            var html = '';
            $.each(data,function (index,comment) {
                html += "<div class='comment'><a href='#' class='username'>" + comment['username'] +
                        "</a><span class='location'>" + comment['location'] +
                        "</span></p><p class='contentTxt'>" + comment['contentTxt'] + "</p></div>";
            });

            $("#resText").html(html);
        });
    })
});

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

$.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对象和一个描述成功请求类型的字符串。

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

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

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

function(XMLHttpRequest,errorThrown){
    // 通常情况下textStatus和errorThrown只有一个包含信息
    this;   // 调用本次Ajax请求时传递的options参数
}

contentType(String):当发送信息至服务器时,内容编码类型默认为”application/x-www-form-urlencoded”。

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

获取JSON数据

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

$(function () {
    $("#send").click(function () {
        $.ajax({
            type:"GET",url:"demo.json",dataType:"json",success: function (data) {
                $("#resText").empty();
                var html = "";
                $.each(data,function (commentIndex,comment) {
                    html += "<div class='comment'><a href='#' class='username'>" + comment['username'] +
                            "</a><span class='location'>" + comment['location'] +
                            "</span></p><p class='contentTxt'>" + comment['contentTxt'] + "</p></div>";
                });
                $("#resText").html(html);
            }
        })
    });
})

AJAX知识总结的更多相关文章

  1. HTML实现代码雨源码及效果示例

    这篇文章主要介绍了HTML实现代码雨源码及效果示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  2. jquery点赞功能实现代码 点个赞吧!

    点赞功能很多地方都会出现,如何实现爱心点赞功能,这篇文章主要为大家详细介绍了jquery点赞功能实现代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

  3. HTML文本属性&amp;颜色控制属性的实现

    这篇文章主要介绍了HTML文本属性&颜色控制属性的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  4. 简洁自适应404页面HTML好看的404源码

    这篇文章主要介绍了简洁自适应404页面HTML好看的404源码,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  5. 详解使用postMessage解决iframe跨域通信问题

    这篇文章主要介绍了详解使用postMessage解决iframe跨域通信问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  6. HTML5适合的情人节礼物有纪念日期功能

    这篇文章主要介绍了HTML5适合的情人节礼物有纪念日期功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  7. html5录音功能实战示例

    这篇文章主要介绍了html5录音功能实战示例的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  8. 如何给HTML标签中的文本设置修饰线

    这篇文章主要介绍了如何给HTML标签中的文本设置修饰线,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

  9. HTML5调用手机发短信和打电话功能

    这篇文章主要介绍了HTML5调用手机发短信和打电话功能,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

  10. HTML利用九宫格原理进行网页布局

    这篇文章主要介绍了HTML利用九宫格原理进行网页布局,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧

随机推荐

  1. xe-ajax-mock 前端虚拟服务

    最新版本见Github,点击查看历史版本基于XEAjax扩展的Mock虚拟服务插件;对于前后端分离的开发模式,ajax+mock使前端不再依赖后端接口开发效率更高。CDN使用script方式安装,XEAjaxMock会定义为全局变量生产环境请使用xe-ajax-mock.min.js,更小的压缩版本,可以带来更快的速度体验。

  2. vue 使用 xe-ajax

    安装完成后自动挂载在vue实例this.$ajaxCDN安装使用script方式安装,VXEAjax会定义为全局变量生产环境请使用vxe-ajax.min.js,更小的压缩版本,可以带来更快的速度体验。cdnjs获取最新版本点击浏览已发布的所有npm包源码unpkg获取最新版本点击浏览已发布的所有npm包源码AMD安装require.js安装示例ES6Module安装通过Vue.use()来全局安装示例./Home.vue

  3. AJAX POST数据中文乱码解决

    前端使用encodeURI进行编码后台java.net.URLDecoder进行解码编解码工具

  4. Koa2框架利用CORS完成跨域ajax请求

    实现跨域ajax请求的方式有很多,其中一个是利用CORS,而这个方法关键是在服务器端进行配置。本文仅对能够完成正常跨域ajax响应的,最基本的配置进行说明。这样OPTIONS请求就能够通过了。至此为止,相当于仅仅完成了预检,还没发送真正的请求呢。

  5. form提交时,ajax上传文件并更新到&lt;input&gt;中的value字段

  6. ajax的cache作用

    filePath="+escape;},error:{alert;}});解决方案:1.加cache:false2.url加随机数正常代码:网上高人解读:cache的作用就是第一次请求完毕之后,如果再次去请求,可以直接从缓存里面读取而不是再到服务器端读取。

  7. 浅谈ajax上传文件属性contentType = false

    默认值为contentType="application/x-www-form-urlencoded".在默认情况下,内容编码类型满足大多数情况。在这里,我们主要谈谈contentType=false.在使用ajax上传文件时:在其中先封装了一个formData对象,然后使用post方法将文件传给服务器。说到这,我们发现在JQueryajax()方法中我们使contentType=false,这不是冲突了吗?这就是因为当我们在form标签中设置了enctype=“multipart/form-data”,

  8. 909422229_ajaxFileUpload上传文件

    ajaxFileUpload.js很多同名的,因为做出来一个很容易。我上github搜AjaxFileUpload出来很多类似js。ajaxFileUpload是一个异步上传文件的jQuery插件传一个不知道什么版本的上来,以后不用到处找了。语法:$.ajaxFileUploadoptions参数说明:1、url上传处理程序地址。2,fileElementId需要上传的文件域的ID,即的ID。3,secureuri是否启用安全提交,默认为false。4,dataType服务器返回的数据类型。6,error

  9. AJAX-Cache:一款好用的Ajax缓存插件

    原文链接AJAX-Cache是什么Ajax是前端开发必不可少的数据获取手段,在频繁的异步请求业务中,我们往往需要利用“缓存”提升界面响应速度,减少网络资源占用。AJAX-Cache是一款jQuery缓存插件,可以为$.ajax()方法扩展缓存功能。

  10. jsf – Ajax update/render在已渲染属性的组件上不起作用

    我试图ajax更新一个有条件渲染的组件。我可以确保#{user}实际上是可用的。这是怎么引起的,我该如何解决呢?必须始终在ajax可以重新呈现之前呈现组件。Ajax正在使用JavaScriptdocument.getElementById()来查找需要更新的组件。但是如果JSF没有将组件放在第一位,那么JavaScript找不到要更新的内容。解决方案是简单地引用总是渲染的父组件。

返回
顶部