回调函数
-
如果要处理$.ajax()得到的数据,则需要使用回调函数。beforeSend、error、dataFilter、success、complete。
beforeSend 在发送请求之前调用,并且传入一个XMLHttpRequest作为参数。 error
在请求出错时调用。传入XMLHttpRequest对象,描述错误类型的字符串以及一个异常对象(如果有的话) dataFilter
在请求成功之后调用。传入返回的数据以及"dataType"参数的值。并且必须返回新的数据(可能是处理过的)传递给success回调函数。
success 当请求之后调用。传入返回后的数据,以及包含成功代码的字符串。 complete
当请求完成之后调用这个函数,无论成功或失败。传入XMLHttpRequest对象,以及一个包含成功或错误代码的字符串。
数据类型
.
a
j
a
x
(
)
函
数
依
赖
服
务
器
提
供
的
信
息
来
处
理
返
回
的
数
据
。
如
果
服
务
器
报
告
说
返
回
的
数
据
是
X
M
L
,
那
么
返
回
的
结
果
就
可
以
用
普
通
的
X
M
L
方
法
或
者
j
Q
u
e
r
y
的
选
择
器
来
遍
历
。
如
果
见
得
到
其
他
类
型
,
比
如
H
T
M
L
,
则
数
据
就
以
文
本
形
式
来
对
待
。
通
过
d
a
t
a
T
y
p
e
选
项
还
可
以
指
定
其
他
不
同
数
据
处
理
方
式
。
除
了
单
纯
的
X
M
L
,
还
可
以
指
定
h
t
m
l
、
j
s
o
n
、
j
s
o
n
p
、
s
c
r
i
p
t
或
者
t
e
x
t
。
其
中
,
t
e
x
t
和
x
m
l
类
型
返
回
的
数
据
不
会
经
过
处
理
。
数
据
仅
仅
简
单
的
将
X
M
L
H
t
t
p
R
e
q
u
e
s
t
的
r
e
s
p
o
n
s
e
T
e
x
t
或
r
e
s
p
o
n
s
e
H
T
M
L
属
性
传
递
给
s
u
c
c
e
s
s
回
调
函
数
,
′
′
′
注
意
′
′
′
,
我
们
必
须
确
保
网
页
服
务
器
报
告
的
M
I
M
E
类
型
与
我
们
选
择
的
d
a
t
a
T
y
p
e
所
匹
配
。
比
如
说
,
X
M
L
的
话
,
服
务
器
端
就
必
须
声
明
t
e
x
t
/
x
m
l
或
者
a
p
p
l
i
c
a
t
i
o
n
/
x
m
l
来
获
得
一
致
的
结
果
。
如
果
指
定
为
h
t
m
l
类
型
,
任
何
内
嵌
的
J
a
v
a
S
c
r
i
p
t
都
会
在
H
T
M
L
作
为
一
个
字
符
串
返
回
之
前
执
行
。
类
似
的
,
指
定
s
c
r
i
p
t
类
型
的
话
,
也
会
先
执
行
服
务
器
端
生
成
J
a
v
a
S
c
r
i
p
t
,
然
后
再
把
脚
本
作
为
一
个
文
本
数
据
返
回
。
如
果
指
定
为
j
s
o
n
类
型
,
则
会
把
获
取
到
的
数
据
作
为
一
个
J
a
v
a
S
c
r
i
p
t
对
象
来
解
析
,
并
且
把
构
建
好
的
对
象
作
为
结
果
返
回
。
为
了
实
现
这
个
目
的
,
他
首
先
尝
试
使
用
J
S
O
N
.
p
a
r
s
e
(
)
。
如
果
浏
览
器
不
支
持
,
则
使
用
一
个
函
数
来
构
建
。
J
S
O
N
数
据
是
一
种
能
很
方
便
通
过
J
a
v
a
S
c
r
i
p
t
解
析
的
结
构
化
数
据
。
如
果
获
取
的
数
据
文
件
存
放
在
远
程
服
务
器
上
(
域
名
不
同
,
也
就
是
跨
域
获
取
数
据
)
,
则
需
要
使
用
j
s
o
n
p
类
型
。
使
用
这
种
类
型
的
话
,
会
创
建
一
个
查
询
字
符
串
参
数
c
a
l
l
b
a
c
k
=
?
,
这
个
参
数
会
加
在
请
求
的
U
R
L
后
面
。
服
务
器
端
应
当
在
J
S
O
N
数
据
前
加
上
回
调
函
数
名
,
以
便
完
成
一
个
有
效
的
J
S
O
N
P
请
求
。
如
果
要
指
定
回
调
函
数
的
参
数
名
来
取
代
默
认
的
c
a
l
l
b
a
c
k
,
可
以
通
过
设
置
.ajax()函数依赖服务器提供的信息来处理返回的数据。如果服务器报告说返回的数据是XML,那么返回的结果就可以用普通的XML方法或者jQuery的选择器来遍历。如果见得到其他类型,比如HTML,则数据就以文本形式来对待。 通过dataType选项还可以指定其他不同数据处理方式。除了单纯的XML,还可以指定 html、json、jsonp、script或者text。 其中,text和xml类型返回的数据不会经过处理。数据仅仅简单的将XMLHttpRequest的responseText或responseHTML属性传递给success回调函数, '''注意''',我们必须确保网页服务器报告的MIME类型与我们选择的dataType所匹配。比如说,XML的话,服务器端就必须声明 text/xml 或者 application/xml 来获得一致的结果。 如果指定为html类型,任何内嵌的JavaScript都会在HTML作为一个字符串返回之前执行。类似的,指定script类型的话,也会先执行服务器端生成JavaScript,然后再把脚本作为一个文本数据返回。 如果指定为json类型,则会把获取到的数据作为一个JavaScript对象来解析,并且把构建好的对象作为结果返回。为了实现这个目的,他首先尝试使用JSON.parse()。如果浏览器不支持,则使用一个函数来构建。JSON数据是一种能很方便通过JavaScript解析的结构化数据。如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。如果要指定回调函数的参数名来取代默认的callback,可以通过设置
.ajax()函数依赖服务器提供的信息来处理返回的数据。如果服务器报告说返回的数据是XML,那么返回的结果就可以用普通的XML方法或者jQuery的选择器来遍历。如果见得到其他类型,比如HTML,则数据就以文本形式来对待。通过dataType选项还可以指定其他不同数据处理方式。除了单纯的XML,还可以指定html、json、jsonp、script或者text。其中,text和xml类型返回的数据不会经过处理。数据仅仅简单的将XMLHttpRequest的responseText或responseHTML属性传递给success回调函数,′′′注意′′′,我们必须确保网页服务器报告的MIME类型与我们选择的dataType所匹配。比如说,XML的话,服务器端就必须声明text/xml或者application/xml来获得一致的结果。如果指定为html类型,任何内嵌的JavaScript都会在HTML作为一个字符串返回之前执行。类似的,指定script类型的话,也会先执行服务器端生成JavaScript,然后再把脚本作为一个文本数据返回。如果指定为json类型,则会把获取到的数据作为一个JavaScript对象来解析,并且把构建好的对象作为结果返回。为了实现这个目的,他首先尝试使用JSON.parse()。如果浏览器不支持,则使用一个函数来构建。JSON数据是一种能很方便通过JavaScript解析的结构化数据。如果获取的数据文件存放在远程服务器上(域名不同,也就是跨域获取数据),则需要使用jsonp类型。使用这种类型的话,会创建一个查询字符串参数callback=?,这个参数会加在请求的URL后面。服务器端应当在JSON数据前加上回调函数名,以便完成一个有效的JSONP请求。如果要指定回调函数的参数名来取代默认的callback,可以通过设置.ajax()的jsonp参数。
注意,JSONP是JSON格式的扩展。他要求一些服务器端的代码来检测并处理查询字符串参数。更多信息可以参阅 最初的文章。
如果指定了script或者jsonp类型,那么当从服务器接收到数据时,实际上是用了<script>标签而不是XMLHttpRequest对象。这种情况下,$.ajax()不再返回一个XMLHttpRequest对象,并且也不会传递事件处理函数,比如beforeSend。
发送数据到服务器
默认情况下,Ajax请求使用GET方法。如果要使用POST方法,可以设定type参数值。这个选项也会影响data选项中的内容如何发送到服务器。
data选项既可以包含一个查询字符串,比如 key1=value1&key2=value2 ,也可以是一个映射,比如 {key1: ‘value1’, key2: ‘value2’}
。如果使用了后者的形式,则数据再发送器会被转换成查询字符串。这个处理过程也可以通过设置processData选项为false来回避。如果我们希望发送一个XML对象给服务器时,这种处理可能并不合适。并且在这种情况下,我们也应当改变contentType选项的值,用其他合适的MIME类型来取代默认的
application/x-www-form-urlencoded 。
高级选项
global选项用于阻止响应注册的回调函数,比如.ajaxSend,或者ajaxError,以及类似的方法。这在有些时候很有用,比如发送的请求非常频繁且简短的时候,就可以在ajaxSend里禁用这个。更多关于这些方法的详细信息,请参阅下面的内容。
如果服务器需要HTTP认证,可以使用用户名和密码可以通过username和password选项来设置。
Ajax请求是限时的,所以错误警告被捕获并处理后,可以用来提升用户体验。请求超时这个参数通常就保留其默认值,要不就通过jQuery.ajaxSetup来全局设定,很少为特定的请求重新设置timeout选项。
默认情况下,请求总会被发出去,但浏览器有可能从他的缓存中调取数据。要禁止使用缓存的结果,可以设置cache参数为false。如果希望判断数据自从上次请求后没有更改过就报告出错的话,可以设置ifModified为true。
scriptCharset允许给<script>标签的请求设定一个特定的字符集,用于script或者jsonp类似的数据。当脚本和页面字符集不同时,这特别好用。
Ajax的第一个字母是asynchronous的开头字母,这意味着所有的操作都是并行的,完成的顺序没有前后关系。$.ajax()的async参数总是设置成true,这标志着在请求开始后,其他代码依然能够执行。强烈不建议把这个选项设置成false,这意味着所有的请求都不再是异步的了,这也会导致浏览器被锁死。
$.ajax函数返回他创建的XMLHttpRequest对象。通常jQuery只在内部处理并创建这个对象,但用户也可以通过xhr选项来传递一个自己创建的xhr对象。返回的对象通常已经被丢弃了,但依然提供一个底层接口来观察和操控请求。比如说,调用对象上的.abort()可以在请求完成前挂起请求。