前言

在项目开发中,为了实现异步向服务端发起请求,最常常使用的就是jQuery.ajax方法了。刚開始需求比較简单,调用jQuery.ajax方法时要传的參数也就那几个常见的參数:url/data/dataType/type/cache/timeout。当时感觉这个接口使用起来非常easy。直到近期项目中要实现一个发送 formData数据到服务端的需求时,我发现自己错了。。

。原来jQuery.ajax方法中除了我用过的那几个外。还有如此之多!!

于是我决定要去jQuery官网好好看看都有哪些我不知道的參数!

參数解析

jQuery.ajax( )方法中的參数能够分为2类:

一类是ajax事件(local events)处理函数相关的參数:包含success/error/beforeSend/complete,这些參数都比較好理解,本文不会进行讨论,若有兴趣,请參考我还有一篇文章《 jquery中ajax的相关事件汇总》;

还有一类是与Ajax请求密切相关的參数,这是本文我想重点和大家解析的參数。

注意:这些參数都是可选參数,假设你没有自己手动设置这些參数,jquery 会使用这些參数的默认值。

1、url

默认值:当前页面的 url

类型:string(字符串)

含义:ajax 请求发送的目的地址(服务端地址)

2、type

默认值:’GET’

类型:string(字符串)

含义:请求的方式。可取值为”POST”, “GET”, “PUT”,”HEADER”等

3、data

默认值:无

类型:PlainObject or String or Array

含义:发送给服务端的数据。

默认情况下。jQuery会在发送之前将data处理为 query string 的格式如“key1=value1&key2=value2“(由于 contentType默认值为‘application/x-www-form-urlencoded。charset=UTF-8’);

若不想要 jQuery进行自己主动转换(将 data 转换为contentType所指定的格式)。则能够通过设置processData=false ,这样 jQuery就不会对 data 进行格式处理了。

4、dataFilter

类型:function(data,type)

含义:对服务端返回的响应数据做进一步的过滤处理

5、accepts

默认值:dataType參数的值

类型:plainObject(简单对象)

含义:client告诉服务端自己能接收那些类型的响应数据

(怎样使用???)

6、async

默认值:true

类型:boolean(布尔值)

含义:表明该 ajax 请求是异步还是同步。异步表示一旦发出这个请求

同步表示发出请求后,程序将暂停等待服务端响应,后面的代码将被堵塞。

直到接收到服务端响应后才继续运行后面的代码。

仅仅需将 async 设置为 false,但由于此使用方法将堵塞浏览器,所以并不建议使用;

注意:跨域ajax请求和 dataType:jsonp的ajax请求中,不支持同步ajax请求

7、cache

默认值:true(但当 dataType为‘jsonp’或者‘script’时。cache默认值将为false)

类型:boolean(布尔值)

含义:当 cache 为 false 时,浏览器将不会缓存请求回来的 pages。当然若你请求的‘jsonp’或者‘script’时,浏览器将默认不缓存。

注意:仅仅有对HEADER/GET类型的ajax请求设置 cache为 false 才有效。

(对于其它类型的ajax请求该參数是不须要的???)

8、contentType:

默认值:’application/x-www-form-urlencoded;charset=UTF-8’

类型:Boolean或String(布尔值/字符串)

含义:此參数用在client向服务端发送数据时(包含get、post)。contentType告诉了服务端‘client所发送数据的类型’,以帮助服务端解析数据。若你发送的数据不是contentType指定的类型数据。则 jQuery会自己主动将数据转换成contentType指定的类型(若要阻止jQuery进行自己主动转换。则设置 processData參数,见此文后面介绍)。

将contentType设置为 false,jQuery将不会在HTTP头部加入contentType字段。

注意:

1、若显式设置了该參数,则无论有没有数据,该 ajax 请求都会被发送。

2、client发送的数据charset仅仅能是 UTF-8,即使你改成其它值,它还是会使用 UTF-8。

3、对于跨域请求,当contentType不是‘application/x-www-form-urlencoded’, ‘multipart/form-data’, or ‘text/plain’时,浏览器都会先发一个 OPTIONS 请求给服务端。然后才发我们要发的 Ajax 请求。

9、dataType

默认值:无

类型:string 字符串

含义:你想要接收的数据类型。若ajax 请求中显式设置了该參数,但服务端返回的数据类型不是dataType指定的类型时。jQuery将会自己主动将返回数据处理为 dataType的格式。

默认情况下该參数没有设置。则 jQuery会依据 response 的 contentType Header来处理返回的数据(相当于将contenType作为 dataType) 。

dataType的值直接影响 success 成功回调函数的 data 參数:

dataType=’xml’:

jQuery会将返回数据处理为 XMLDocument 对象,此时data为 XMLDocument 对象 ,能够用 DOM API对 data直接操作;

通过 jqXHR.responseXML能够获取到;

dataType=’html’或‘text’:

jQuery不会对返回数据做不论什么处理。data 为纯文本。不能使用DOM API对 data直接操作;

通过 jqXHR.responseText能够获取到;

dataType=’json’:

jQuery会将返回数据处理为javascript对象, data 为javascript对象。若返回的数据为空将会报错。当无数据返回时应该返回null或者{};

通过 jqXHR.responseJSON能够获取到。

dataType=’script’:

jQuery不会对返回数据做不论什么处理,data 为纯文本。

但在 jQuery将数据传递给成功回调前,会先运行script 文本;

dataType=’jsonp’:

默认情况下(即没有显式设置 jsonp 參数时)jQuery会自己主动在请求 URL末尾加入“callback=?”;

服务端会返回 javascript 文本数据,jQuery会将其转换为 json 数据;

在将 json 数据传递给成功回调函数之前。jQuery会运行这些 javascript,同一时候也会调用 jsonpCallback回调函数;

你会发现:事实上返回的数据类型就2大类:XML和文本(json 类型的数据也是字符串文本),所以ajax请求的响应仅仅分为2种:responseText和responseXML

10、global

默认值:true

类型:boolean布尔值

含义:决定该ajax请求是否会触发ajax 的 global事件如 ajaxStop/ajaxStart。当 ajax请求为跨域的 script请求或 JSONP请求。则 global 自己主动被设置为 false;

11、headers

默认值:{}

类型:plainObject简单对象

含义:在请求header中加入额外的头部字段。

注意:该參数加入的头部字段能够在beforeSend方法中进行覆盖

12、ifModified

默认值:false

类型:boolean 布尔值

含义:当该參数为false时,jQuery将不会检查响应 header 的Last-Modified和etag字段。当为 true 时,jQuery则会检查这2个字段看数据是否有变化。有变化才触发 success 回调。

13、processData

默认值:true

类型:boolean 布尔值

含义:若此參数设置为true时,jQuery会将data參数的值处理为contentType參数所指定的格式类型。contentType的默认值为’application/x-www-form-urlencoded;charset=UTF-8’,所以当data參数值为 object 或 array 类型时,jQuery会将 data 数据自己主动转换为符合’application/x-www-form-urlencoded;charset=UTF-8’格式的数据(即 query string 类型)。当你要发送DOMDocument或者formData时。则应该将processData置为 false,以避免 jQuery对data做自己主动格式转换处理。

14、statusCode

默认值:{}

类型:plainObject

含义:定义了针对各个HTTP响应状态码的回调函数。实比例如以下:

$.ajax({
statusCode: {
404: function() {
alert( "page not found" );
}
}
});

15、timeout

默认值:无

类型: number (单位:毫秒)

含义:定义了 ajax 请求超时的时间。从ajax请求发送出去算起,经过了timeout指定的时间后。ajax 请求还未返回。则会触发 jquery ajax的 error 事件(原生的 XMLHttpRequest则会触发 ontimeout事件)。

16、context

默认值:ajax setting对象(是.ajaxSetting和传给.ajax的 setting 參数两者合并后的对象)

类型: 对象

含义:指代 ajax各种回调处理函数中的 this 。

示比例如以下:

$.ajax({
url: "test.html",
context: document.body
}).done(function() {
$( this ).addClass( "done" );//此时的this指的是body对象
});

17、mimeType

默认值:无

类型: string

含义:功能与原生的 XMLHttpRequest.overrideMimeType( )一样。用来覆盖服务端所返回数据的 MIME 类型。比方你想将返回的数据当做‘text/xml’来处理和解析,即使服务端没有指定,则仅仅须要将mimeType置为‘text/xml’。

jQuery.ajax()方法中參数具体解析的更多相关文章

  1. jQuery Ajax 方法调用 Asp.Net WebService 以及调用aspx.cs中方法的详细例子

    一.jQuery Ajax 方法调用 Asp.Net WebService (引自Terry Feng) Html文件 <!DOCTYPE html PUBLIC "-//W3C//D ...

  2. MVC中使用Ajax提交数据 Jquery Ajax方法传值到action

    Jquery Ajax方法传值到action <script type="text/javascript"> $(document).ready(function(){ ...

  3. jQuery AJAX 方法 success()后台传来的4种数据

    JAVA中的四种JSON解析方式详解 jQuery AJAX 方法 success()后台传来的4种数据 1.后台返回一个页面 js代码 /**(1)用$("#content-wrapper ...

  4. Web容器自己主动对HTTP请求中參数进行URLDecode处理

    这篇文章转载自 : Web容器自己主动对HTTP请求中參数进行URLDecode处理 如题.在Java中或许非常多人都没有注意到当我们发送一个http请求时,假设附带的參数被URLEncode之后,到 ...

  5. 再谈Jquery Ajax方法传递到action 【转载】

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://cnn237111.blog.51cto.com/2359144/984466 之 ...

  6. 再谈Jquery Ajax方法传递到action(转)

    之前写过一篇文章Jquery Ajax方法传值到action,本文是对该文的补充. 假设 controller中的方法是如下: public ActionResult ReadPerson(Perso ...

  7. jQuery框架-2.jQuery操作DOM节点与jQuery.ajax方法

    一.jQuery操作DOM 内部插入操作: append(content|fn):向每个匹配的元素内部追加内容. prepend(content):向每个匹配的元素内部前置内容. 外部插入操作: af ...

  8. [Python] partial改变方法默认參数

    Python 标准库中 functools库中有非常多对方法非常有有操作的封装,partial Objects就是当中之中的一个,他是对方法參数默认值的改动. 以下就看下简单的应用測试. #!/usr ...

  9. jQuery AJAX方法详谈

    AJAX是与服务器交换数据并更新部分网页的技术,而无需重新加载整个页面. 下表列出了所有jQuery AJAX方法: 方法 描述 $.ajax() 执行异步AJAX请求 $.ajaxPrefilter ...

随机推荐

  1. 【分块】[HNOI2010]弹飞绵羊&分块大法祭

    分块(似乎还有一种动态树(LCT)做法) 第一次学习分块,似乎有点小激动 这是黄学长的分块入门博客「分块」数列分块入门1 – 9 by hzwer 题目描述 某天,Lostmonkey发明了一种超级弹 ...

  2. (33)zabbix proxy分布式监控配置

    概述 zabbix proxy可以代替zabbix server检索客户端的数据,然后把数据汇报给zabbix server,并且在一定程度上分担了zabbix server的压力.zabbix pr ...

  3. python logging with yaml

    Recently, I was made a service which can provide a simple way to get best model. so, i spent lot of ...

  4. 守护进程,互斥锁,IPC,生产者与消费者模型

    守护进程: b 进程守护 a进程,当a进程执行完毕时,b进程会跟着立马结束 守护进程用途: 如果父进程结束了,子进程无需运行了,就可以将子进程设置为父进程的守护进程 例如我们qq视频聊天时,当我们退出 ...

  5. 入门人工智能的首选语言为什么会是Python?

    为何人工智能(AI)首选Python?当你读完这篇文章就会明白了.为何人工智能(AI)首选Python?读完这篇文章你就知道了.我们看谷歌的TensorFlow基本上所有的代码都是C++和Python ...

  6. uboot-imx RGB24分析

    在mx6q_sabrsd.c文件中 函数else if(strcmp(s, "YUV444") == 0) val = IPU_PIX_FMT_YUV444; else val = ...

  7. H.264 Profile-level-id

    基于SIP协议的VOIP通信,该字段通常位于视频协商sdp报文中,如: video RTP/AVP rtpmap: H264/ fmtp: profile-level-id=42801E; packe ...

  8. 【Luogu】P1393动态逆序对(树套树)

    题目链接 树套树. 每次删掉x的时候会减去1到x-1里比x位置的数大的数和它构成的逆序对,以及x+1到n里比x位置的数小的数和它构成的逆序对. 顺带一提我发现平衡树insert的时候不是要splay一 ...

  9. 【Luogu】P3376网络最大流模板(Dinic)

    最大流模板成为另一个被攻克的模板题. 今天QDC给我讲了一下Dinic,感觉很好懂.于是为了巩固就把这道题A掉了. 核心思想就是不断BFS分层,然后不断DFS找增广路.找不到之后就可以把答案累加输出了 ...

  10. BZOJ 2179 FFT快速傅立叶 ——FFT

    [题目分析] 快速傅里叶变换用于高精度乘法. 其实本质就是循环卷积的计算,也就是多项式的乘法. 两次蝴蝶变换. 二进制取反化递归为迭代. 单位根的巧妙取值,是的复杂度成为了nlogn 范德蒙矩阵计算逆 ...