jquery ajax xhr方法中xhrFields参数是做什么用的

jquery&ajax&异步请求参数问题&&第二章
jQuery.ajax( url [, settings ] )
一个用来包含发送请求的URL字符串。
一个以"{键:值}"组成的AJAX 请求设置。所有选项都是可选的。可以使用设置任何默认参数。看下所有设置的完整列表。
添加的版本:&jQuery.ajax(
[settings ] )
一个以"{键:值}"组成的AJAX 请求设置。所有选项都是可选的。可以使用设置任何默认参数。
accepts&(默认:&取决于数据类型)
内容类型发送请求头(Content-Type),用于通知服务器该请求需要接收何种类型的返回结果。如果accepts设置需要修改,推荐在$.ajaxSetup()&方法中设置一次。
async&(默认:&true)
默认设置下,所有请求均为异步请求(也就是说这是默认设置为&true&)。如果需要发送同步请求,请将此选项设置为&false&。跨域请求和&dataType:
"jsonp"&请求不支持同步操作。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。从
jQuery 1.8 开始, jqXHR ($.Deferred)中使用&async:
false&已经过时。您必须使用的 success/error/complete
的回调选项代替相应的jqXHR对象的方法,比如jqXHR.done()&或者过时的jqXHR.success()
beforeSend
类型:&(&&jqXHR,&&settings
请求发送前的回调函数,用来修改请求发送前jqXHR(在jQuery
1.4.x的中,XMLHttpRequest)对象,此功能用来设置自定义 HTTP
头信息,等等。该jqXHR和设置对象作为参数传递。这是一个&。在beforeSend函数中返回false将取消这个请求。从jQuery
1.5开始,&beforeSend选项将被访问,不管请求的类型。
cache&(默认:&true,
dataType为"script"和"jsonp"时默认为false)
如果设置为 false ,浏览器将不缓存此页面。注意:&设置cache为
HEAD和GET请求中正常工作。它的工作原理是在GET请求参数中附加"_={timestamp}"(译者注:时间戳)。该参数不是其他请求所必须的,除了在IE8中,当一个POST请求一个已经用GET请求过的URL。
类型:&(&&jqXHR,&&textStatus
请求完成后回调函数 (请求success&和&error之后均调用)。这个回调函数得到2个参数:
jqXHR (在 jQuery 1.4.x中是 XMLHTTPRequest)
对象和一个描述请求状态的字符串("success",&"notmodified",&"nocontent","error",&"timeout",&"abort",
或者"parsererror")
。从jQuery
1.5开始,&complete设置可以接受一个函数的数组。每个函数将被依次调用。这是一个&。
一个以"{字符串/正则表达式}"配对的对象,根据给定的内容类型,解析请求的返回结果。&(新增)
contentType&(default:&'application/x-www-form-
charset=UTF-8')
Type:&&or&
当将数据发送到服务器时,使用该内容类型。默认值是"application/x-www-form-
charset=UTF-8",适合大多数情况。如果你明确地传递了一个内容类型(Content-Type)给$.ajax(),那么他总是会发送给服务器(即使没有数据要发送)。从
jQuery 1.6 开始,你可以传递false来告诉jQuery,没有设置任何内容类型头信息。&注意:W3C的XMLHttpRequest的规范规定,数据将总是使用UTF-8字符集传递给服务器;指定其他字符集无法强制浏览器更改编码。&注意:对于跨域请求,内容类型设置为application/x-www-form-urlencoded,multipart/form-data,
或&text/plain以外,
将触发浏览器发送一个预检OPTIONS请求到服务器。
这个对象用于设置Ajax相关回调函数的上下文。 默认情况下,这个上下文是一个ajax请求使用的参数设置对象,($.ajaxSettings合并独傲这个设置,传递给$.ajax)。比如指定一个DOM元素作为context参数,这样就设置了complete回调函数的上下文为这个DOM元素。就像这样:
"test.html",
context: document.body
}).done(function()
$(this).addClass("done");
converters&(默认:&{"*
text": window.String, "text html": true, "text json":
jQuery.parseJSON, "text xml": jQuery.parseXML})
一个数据类型到数据类型转换器的对象。每个转换器的值是一个函数,返回经转换后的请求结果。&(&新增)
crossDomain&(默认:&同域请求为false,
跨域请求为true)
如果你想在同一域中强制跨域请求(如JSONP形式),例如,想服务器端重定向到另一个域,那么需要将crossDomain设置为&true&。&(&&新增)
类型:&&或&&或&
发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后面。查看processData&选项说明,以禁止此自动转换。对象必须为"{键:值}"格式。如果这个参数是一个数组,jQuery会按照traditional&参数的值,
将自动转化为一个同名的多值查询字符串(查看下面的说明)。愚人码头注:如 {foo:["bar1", "bar2"]} 转换为
'&foo=bar1&foo=bar2'。
dataFilter
类型:&(&&data,&&type
一个函数被用来处理XMLHttpRequest的原始响应数据。这是一个预过滤功能,净化响应。您应该返回安全数据。提供data和type两个参数:data是Ajax返回的原始数据,type是调用jQuery.ajax时提供的dataType参数。
dataType&(default:&Intelligent
Guess (xml, json, script, or html))
从服务器返回你期望的数据类型。 如果没有指定,jQuery将尝试通过MIME类型的响应信息来智能判断(一个XML
MIME类型就被识别为XML,在1.4中 JSON将生成一个JavaScript对象,在1.4中 script
将执行该脚本,其他任何类型会返回一个字符串)。&可用的类型(以及结果作为第一个参数传递给成功回调函数)有:
"xml": 返回 XML 文档,可以通过 jQuery 处理。
"html": 返回纯文本 HTML 文本;包含的script标签会在插入DOM时执行。
"script": 把响应的结果当作 JavaScript
执行,并将其当作纯文本返回。默认情况下会通过在URL中附加查询字符串变量 ,_=[TIMESTAMP],
禁用缓存结果,除非设置了cache参数为true。注意:&在远程请求时(不在同一个域下),所有POST请求都将转为GET请求。(愚人码头注:因为将使用DOM的script标签来加载)
"json":把响应的结果当作 JSON 执行,并返回一个JavaScript对象。跨域"json"&请求转换为"jsonp",除非该请求在其请求选项中设置了jsonp:false。JSON
数据以严格的方式解析;
任何畸形的JSON将被拒绝,并且抛出解析错误信息。在jQuery1.9中,一个空响应也将被拒绝;服务器应该返回null或&{}响应代替。(见的更多信息,正确的JSON格式。)
"jsonp": 以&&的方式载入
JSON 数据块。会自动在所请求的URL最后添加"?callback=?"。默认情况下会通过在URL中附加查询字符串变量
,_=[TIMESTAMP],
禁用缓存结果,除非设置了cache参数为true。
"text": 返回纯文本字符串。
多个用空格分割的值:从
jQuery 1.5 开始,
jQuery可以内容类型(Content-Type)头收到并转换一个您需要的数据类型。例如,如果你想要一个文本响应为XML处理,使用"text
xml"数据类型。您也可以将一个JSONP的请求,以文本形式接受,并用jQuery以XML解析:&"jsonp
text xml"。同样地可以使用"jsonp xml"简写,首先会尝试从 jsonp 到 xml
的转换,如果转换失败,就先将 jsonp 转换成 text, 然后再由 text 转换成 xml。
类型:&(&&jqXHR,&&textStatus,&&errorThrown
请求失败时调用此函数。有以下三个参数:jqXHR (在 jQuery 1.4.x前为XMLHttpRequest)
对象、描述发生错误类型的一个字符串 和 捕获的异常对象。如果发生了错误,错误信息(第二个参数)除了得到null之外,还可能是"timeout",&"error",&"abort"&,和"parsererror"。
当一个HTTP错误发生时,errorThrown&接收HTTP状态的文本部分,比如:
"Not Found"(没有找到) 或者 "Internal Server
Error."(服务器内部错误)。&从jQuery
1.5开始, 在error设置可以接受函数组成的数组。每个函数将被依次调用。&注意:此处理程序在跨域脚本和JSONP形式的请求时不被调用。这是一个&。
global&(默认:&true)
无论怎么样这个请求将触发全局AJAX事件处理程序。默认是true&。设置为&false&将不会触发全局
AJAX 事件,如&ajaxStart&或者&ajaxStop。这可以用来控制各种&.
headers&(默认:&{})
一个额外的"{键:值}"对映射到请求一起发送。此设置会在beforeSend&函数调用之前被设置
;因此,请求头中的设置值,会被beforeSend&函数内的设置覆盖
ifModified&(默认:&false)
只有上次请求响应改变时,才允许请求成功。使用 HTTP 包 Last-Modified 头信息判断。默认值是false,忽略HTTP头信息。在jQuery
1.4中,他也会检查服务器指定的'etag'来确定数据没有被修改过。
isLocal&(默认:&取决于当前的位置协议)
允许当前环境被认定为“本地”,(如文件系统),即使jQuery默认情况下不会这么做。以下协议目前公认为本地:file,&*-extension,
and&widget。如果isLocal设置需要修改,建议在$.ajaxSetup()方法中这样做一次。&(&新增
在一个JSONP请求中重写回调函数的名字。这个值用来替代在"callback=?"这种GET或POST请求中URL参数里的"callback"部分,比如{jsonp:'onJsonPLoad'}会导致将"onJsonPLoad=?"传给服务器。在jQuery
1.5,,设置jsonp选项为false,阻止了jQuery从加入"?callback"字符串的URL或试图使用"=?"转换。在这种情况下,你也应该明确设置jsonpCallback设置。例如,&{
jsonp: false, jsonpCallback: "callbackName" }
jsonpCallback
为jsonp请求指定一个回调函数名。这个值将用来取代jQuery自动生成的随机函数名。这主要用来让jQuery生成一个独特的函数名,这样管理请求更容易,也能方便地提供回调函数和错误处理。你也可以在想让浏览器缓存GET请求的时候,指定这个回调函数名。从jQuery
1.5开始,你也可以使用一个函数作为该参数设置,在这种情况下,该函数的返回值就是jsonpCallback的结果。
method&(default:&'GET')
HTTP 请求方法 (比如:"POST",&"GET
",&"PUT")。&(添加版本:&)。(愚人码头注:如果你使用jQuery
1.9.0 之前的版本,你需要使用type选项。)
一个mime类型用来覆盖XHR的
MIME类型。&(&新增
用于响应HTTP访问认证请求的密码
processData&(默认:&true)
默认情况下,通过data选项传递进来的数据,如果是一个对象(技术上讲只要不是字符串),都会处理转化成一个查询字符串,以配合默认内容类型
"application/x-www-form-urlencoded"。如果要发送 DOM
树信息或其它不希望转换的信息,请设置为&false。
scriptCharset
仅适用于当"script"传输使用时(例如,跨域的"jsonp"或 dataType选项为"script" 和
"GET"类型)。请求中使用在script标签上设置charset&属性。通常只在本地和远程的内容编码不同时使用。
statusCode&(默认:&{})
一组数值的HTTP代码和函数对象,当响应时调用了相应的代码。例如,如果响应状态是404,将触发以下警报:
statusCode: {
function() {
alert("page
not found");
如果请求成功,状态代码对应的函数作为回调的成功相同的参数;如果在一个错误的结果,他们采取了相同的参数error回调。
类型:&(&&data,&&textStatus,&&jqXHR
请求成功后的回调函数。这个函数传递3个参数:从服务器返回的数据,并根据dataType参数进行处理后的数据,一个描述状态的字符串;还有
jqXHR(在jQuery 1.4.x前为XMLHttpRequest) 对象 。在jQuery
1.5,&成功设置可以接受一个函数数组。每个函数将被依次调用。这是一个
Type:&(&&data,&&textStatus,&&jqXHR
请求成功后的回调函数。这个函数传递3个参数:从服务器返回的数据,并根据dataType参数进行处理后的数据或dataFilter回调函数,如果指定的话;一个描述状态的字符串;还有
jqXHR(在jQuery 1.4.x前为XMLHttpRequest) 对象 。在jQuery
1.5,&成功设置可以接受一个函数数组。每个函数将被依次调用。这是一个&
设置请求超时时间(毫秒)。此设置将覆盖&里的全局设置。
超时周期开始于$.ajax&访问成功的那个时间点;如果几个其他请求都在进步并且浏览器有没有可用的连接,它有可能在被发送前就超时了。在
jQuery 1.4.x
和前面的版本中,&如果请求超时,XMLHttpRequest对象是处于无效状态;访问任何对象的成员可能会抛出一个异常。只有在
Firefox 3.0+,script 和
JSONP请求在超时后不能被取消;该脚本将运行即使超时后到达。
traditional
如果你想要用传统的方式来序列化数据,那么就设置为true。请参考工具分类下面的方法.
type&(默认:&'GET')
method选项的别名。如果你使用jQuery 1.9.0 之前的版本,你需要使用type选项。
url&(默认:&当前页面地址)
发送请求的地址。
于响应HTTP访问认证请求的用户名
xhr&(默认:&当可用的ActiveXObject(IE)中,否则为XMLHttpRequest)
回调创建XMLHttpRequest对象。当可用时默认为ActiveXObject(IE)中,否则为XMLHttpRequest。提供覆盖你自己的执行的XMLHttpRequest或增强工厂。
一对“文件名-文件值”组成的映射,用于设定原生的&XHR对象。例如,如果需要的话,在进行跨域请求时,你可以用它来设置withCredentials为true。
url: a_cross_domain_url,
xhrFields: {
withCredentials:
在 jQuery 1.5中,&withCredentials属性不会传递给原生的XHR从而对于需要使用此属性的
CORS 请求,则只能忽略这个属性。。出于这个原因,我们建议您使用jQuery1.5.1+,如果您需要使用它。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。本帖子已过去太久远了,不再提供回复功能。Jquery-ajax方法data参数用法的总结_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
Jquery-ajax方法data参数用法的总结
上传于|0|0|暂无简介
你可能喜欢JQuery.Ajax()的data参数类型实例详解
字体:[ ] 类型:转载 时间:
这篇文章主要介绍了JQuery.Ajax()的data参数类型实例详解,需要的朋友可以参考下
假如现在有这样一个表单,是添加元素用的。
&form id='addForm' action='UserAdd.action' type='post'&
&label for='uname'&用户名&/label&:&input type='text' name='uname' id='uname'&&br&
&label for='mobileIpt'&手机号:&/label&&input type='text' name='mobileIpt' id='mobileIpt'&&br&
&label for='birthday'&生日:&/label&&input type='text' name='birthday'&&br&
&input type='button' value='提交' onclick='addUser()'&
我们不想使用表单submit的方式添加这个元素,我们就想使用ajax提交。
以前我们是这样实现的:
function addUser(){
var user = {
uname:$("#uname").val(),
mobileIpt:$("#mobileIpt").val(),
birthday:$("#birthday").val()
url:'UserAdd.action',
data:user,
type:'post',
dataType:'text',
success:function(msg){
if(msg=='1'){
console.log('添加成功');
console.log('添加失败')
这没有什么错,就是获取表单元素的值实在是太麻烦....这里只有三项,很多项的时候就废了....
直到有一天,我发现了jquery的serializeArray方法
序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。
注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第三方库进行字符串化操作。
返回的JSON对象是由一个对象数组组成的,其中每个对象包含一个或两个名值对——name参数和value参数(如果value不为空的话)。
我们来试试看
$('#addForm').serializeArray();
//返回数据结构,是json数组,每个对像分别name和value为key,代表这个表单元素的name和value
{"name":"uname","value":""},
{"name":"mobileIpt","value":""},
{"name":"birthday","value":""}
这个貌似用不上啊
我们使用JQuery.param()方法处理一下:
var arr = $('#addForm').serializeArray();
$.param(arr);
"uname=alice&mobileIpt=110&birthday="
嘿这下符合我们的需求了吧,虽然不是json类型,但是至少可以作为data上传了。
这里我们可以直接在ajax的data处填上这个json数组,在jquery内部自己调用$.param()处理的。
我们来看下jquery.param()方法的说明:
返回值:StringjQuery.param(obj,[traditional])
将表单元素数组或者对象序列化。
obj,[traditional]
数组或jQuery对象会按照name/value对进行序列化,普通对象按照key/value对进行序列化。
traditional:是否使用传统的方式浅层序列化。
$.param({uanme:'vic',mobileIpt:'110',birthday:''});
"uanme=vic&mobileIpt=110&birthday="
看着说明,貌似也跟我们没关系啊,我们换一个json数组来看
$.param([{uanme:'vic'},{mobileIpt:'110'},{birthday:''}]);
"undefined=&undefined=&undefined="
这个转换不成功了吧,为什么我们表单的那种数据能够成功转换成url参数呢?我们来看下jquery源码
//在ajax()方法中,对json类型的数据进行了$.param()处理
if ( s.data && s.processData && typeof s.data !== "string" ) {
s.data = jQuery.param( s.data, s.traditional );
//param方法中
if ( jQuery.isArray( a ) || ( a.jquery && !jQuery.isPlainObject( a ) ) ) {
// Serialize the form elements
jQuery.each( a, function() {
add( this.name, this.value );
// If traditional, encode the "old" way (the way 1.3.2 or older
// did it), otherwise encode params recursively.
for ( prefix in a ) {
buildParams( prefix, a[ prefix ], traditional, add );
这下明白了吧,如果是json数据,那么挨个循环,只取他们的name属性和value属性拼接字符串。
如果是普通对象,循环该对象的属性,然后拼接字符串。
所以,本文要说的是,在jquery的ajax函数中,可以传入3种类型的数据
1.文本:"uname=alice&mobileIpt=110&birthday="
2.json对象:{uanme:'vic',mobileIpt:'110',birthday:''}
3.json数组:
{"name":"uname","value":"alice"},
{"name":"mobileIpt","value":"110"},
{"name":"birthday","value":""}
所以,我们可以一键获取表单并提交,非常方便。
其实提取表单数据的话只需要serialize()方法直接获取"uname=alice&mobileIpt=110&birthday="这样的就可以了。
ps:jquery中ajax方法data参数的用法小结
type: post,
url: some.php,
data: name=john&location=boston, //第一种方式传参
// data: {name:john,location:boston} //第二种方式传参
// data: {foo:[bar1, bar2]} 转换为 '&foo=bar1&foo=bar2'
第一种我们用url传参,参数里面如果加带&这个符号地话,可能参数接收不到或不完整,
如“ data: name=john&location=boston,” 如果name地值是john&smith这样写可能就会有问题,
我们可以用js里面地encodeuricomponent()方法进行转义,
但如果用data: {name:john,location:boston}这种方式写地话就不需要进行转义,
如果转义地话,接收地将是转义后地字符串
success: function(msg){
alert( data saved: + msg );
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具周梦康-注意:Jquery的ajax中传递的参数data不能直接给值
注意:Jquery的ajax中传递的参数data不能直接给值
背景:接受指导老师申请页面,拒绝和通过都是无刷新的,方法有很多种,可以表单交给一个隐藏的iframe窗口去提交,这里我想用下ajax&a href="javascript:void(0);" onclick="doDel({$list.Id},this)" &&img alt="拒绝" src="__IMG__/onError.gif" /&&/a&&script&
function doDel(sid,ob){
if(confirm("确定要拒绝吗?"))
//alert(sid);
url:"__URL__/instructorsTeamApproved",
type:"POST",
data:{id:sid,a:2},
dataType:"json",
success:function(){
$(ob).parents("tr").remove();
error:function(){
alert('error');
&/script&测试总是失败,我在deDEL函数中加了第四行alert(sid),也正常弹出。方法中也确认没有错误,但是总是不能返回成功状态;纠结了很久,最后我想:莫非是上面的第8行中传输的数据中参数data:{id:sid,a:2}的问题?果不其然删掉这个a:2之后问题就解决了,又测试了下a:'2'也不行。看来data:{里面的数组不能给某个参数设置默认值啦}?最后修改成了下面这样,在函数里增加一个参数&a href="javascript:void(0);" onclick="doDel({$list.Id},2,this)" &&img alt="拒绝" src="__IMG__/onError.gif" /&&/a&function doDel(sid,action,ob){
if(confirm("确定要拒绝吗?"));
url:"__URL__/instructorsTeamApproved/",
type:"POST",
data:{id:sid,aa:action},
dataType:"json",
success:function(){
$(ob).parents("tr").remove();
error:function(){
alert('error');
&&( 10:36:58)&&( 20:36:15)&&( 21:48:51)&&( 19:13:24)&&( 14:30:20)&&( 21:13:7)&&( 19:44:3)&&( 17:8:42)&&( 21:49:32)&&( 20:19:27)

我要回帖

更多关于 jquery ajax xhr 的文章

 

随机推荐