JQuery系列(4) - AJAX方法
jQuery对象上面还定义了Ajax方法($.ajax()),用来处理Ajax操作。调用该方法后,浏览器就会向服务器发出一个HTTP请求。
$.ajax方法
$.ajax()的用法主要有两种。
$.ajax(url[, options])
$.ajax([options])
上面代码中的url,指的是服务器网址,options则是一个对象参数,设置Ajax请求的具体参数。
$.ajax({
async: true,
url: '/url/to/json',
type: 'GET',
data : { id : 123 },
dataType: 'json',
timeout: 30000,
success: successCallback,
error: errorCallback,
complete: completeCallback,
statusCode: {
404: handler404,
500: handler500
}
})
function successCallback(json) {
$('<h1/>').text(json.title).appendTo('body');
}
function errorCallback(xhr, status){
console.log('出问题了!');
}
function completeCallback(xhr, status){
console.log('Ajax请求已结束。');
}
上面代码的对象参数有多个属性,含义如下:
- accepts:将本机所能处理的数据类型,告诉服务器。
- async:该项默认为true,如果设为false,则表示发出的是同步请求。
- beforeSend:指定发出请求前,所要调用的函数,通常用来对发出的数据进行修改。
- cache:该项默认为true,如果设为false,则浏览器不缓存返回服务器返回的数据。注意,浏览器本身就不会缓存POST请求返回的数据,所以即使设为false,也只对HEAD和GET请求有效。
- complete:指定当HTTP请求结束时(请求成功或请求失败的回调函数,此时已经运行完毕)的回调函数。不管请求成功或失败,该回调函数都会执行。它的参数为发出请求的原始对象以及返回的状态信息。
- contentType:发送到服务器的数据类型。 //发送服务器的数据类型,请求返回的数据类型是由dataType指定!!!
- context:指定一个对象,作为所有Ajax相关的回调函数的this对象。
- crossDomain:该属性设为true,将强制向相同域名发送一个跨域请求(比如JSONP)。
- data:向服务器发送的数据,如果使用GET方法,此项将转为查询字符串,附在网址的最后。
- dataType:向服务器请求的数据类型,可以设为text、html、script、json、jsonp和xml。
- error:请求失败时的回调函数,函数参数为发出请求的原始对象以及返回的状态信息。
- headers:指定HTTP请求的头信息。
- ifModified:如果该属性设为true,则只有当服务器端的内容与上次请求不一样时,才会发出本次请求。
- jsonp:指定JSONP请求“callback=?”中的callback的名称。
- jsonpCallback: 指定JSONP请求中回调函数的名称。
- mimeType:指定HTTP请求的mime type。
- password:指定HTTP认证所需要的密码。
- statusCode:值为一个对象,为服务器返回的状态码,指定特别的回调函数。
- success:请求成功时的回调函数,函数参数为服务器传回的数据、状态信息、发出请求的原始对象。
- timeout: 等待的最长毫秒数。如果过了这个时间,请求还没有返回,则自动将请求状态改为失败。
- type:向服务器发送信息所使用的HTTP动词,默认为GET,其他动词有POST、PUT、DELETE。
- url:服务器端网址。这是唯一必需的一个属性,其他属性都可以省略。
- username:指定HTTP认证的用户名。
- xhr:指定生成XMLHttpRequest对象时的回调函数。
$.ajax简便写法
ajax方法还有一些简便写法。
- $.get():发出GET请求。
- $.getScript():读取一个JavaScript脚本文件并执行。
- $.getJSON():发出GET请求,读取一个JSON文件。
- $.post():发出POST请求。
- $.fn.load():读取一个html文件,并将其放入当前元素之中。
一般来说,这些简便方法依次接受三个参数:url、数据、成功时的回调函数。
(1)$.get(),$.post()
这两个方法分别对应HTTP的GET方法和POST方法。
$.get('/data/people.html', function(html){
$('#target').html(html);
});
$.post('/data/save', {name: 'Rebecca'}, function (resp){
console.log(JSON.parse(resp));
});
get方法和post方法的参数相同,第一个参数是服务器网址,该参数是必需的,其他参数都是可选的。第二个参数是发送给服务器的数据,第三个参数是操作成功后的回调函数。
(2)$.getJSON()
ajax方法的另一个简便写法是getJSON方法。当服务器端返回JSON格式的数据,可以用这个方法代替$.ajax方法。
$.getJSON('url/to/json', {'a': 1}, function(data){
console.log(data);
});
上面的代码等同于下面的写法。
(3)$.getScript()
$.getScript方法用于从服务器端加载一个脚本文件。
getScript的回调函数接受三个参数,分别是脚本文件的内容,HTTP响应的状态信息和ajax对象实例。
$.getScript( "ajax/test.js", function (data, textStatus, jqxhr){
console.log( data ); // test.js的内容
console.log( textStatus ); // Success
console.log( jqxhr.status ); //
});
getScript是ajax方法的简便写法,因此返回的是一个deferred对象,可以使用deferred接口。
jQuery.getScript("/path/to/myscript.js")
.done(function() {
// ...
})
.fail(function() {
// ...
});
(4)$.fn.load()
$.fn.load不是jQuery的工具方法,而是定义在jQuery对象实例上的方法,用于获取服务器端的HTML文件,将其放入当前元素。由于该方法也属于ajax操作,所以放在这里一起讲。
$('#newContent').load('/foo.html');
$.fn.load方法还可以指定一个选择器,将远程文件中匹配选择器的部分,放入当前元素,并指定操作完成时的回调函数。
$('#newContent').load('/foo.html #myDiv h1:first',
function(html) {
console.log('内容更新!');
});
load方法可以附加一个字符串或对象作为参数,一起向服务器提交。如果是字符串,则采用GET方法提交;如果是对象,则采用POST方法提交
$( "#feeds" ).load( "feeds.php", { limit: 25 }, function() {
console.log( "已经载入" );
});
上面代码将{ limit: 25 }通过POST方法向服务器提交。
Ajax其它
ajax事件方法绑定
jQuery提供以下一些方法,用于指定特定的AJAX事件的回调函数。
- .ajaxComplete():ajax请求完成。
- .ajaxError():ajax请求出错。
- .ajaxSend():ajax请求发出之前。
- .ajaxStart():第一个ajax请求开始发出,即没有还未完成ajax请求。
- .ajaxStop():所有ajax请求完成之后。
- .ajaxSuccess():ajax请求成功之后。
下面是示例。
//Ajax请求指示器
$('#loading_indicator')
.ajaxStart(function (){$(this).show();})
.ajaxStop(function (){$(this).hide();}); //下面是处理Ajax请求出错(返回404或500错误)的例子。
$(document).ajaxError(function (e, xhr, settings, error) {
console.log(error);
});
返回值
ajax方法返回的是一个deferred对象,可以用then方法为该对象指定回调函数.
JSONP
由于浏览器存在“同域限制”,ajax方法只能向当前网页所在的域名发出HTTP请求。但是,通过在当前网页中插入script元素(<script>),可以向不同的域名发出GET请求,这种变通方法叫做JSONP(JSON with Padding)。
ajax方法可以发出JSONP请求,方法是在对象参数中指定dataType为JSONP。
$.ajax({
url: '/data/search.jsonp',
data: {q: 'a'},
dataType: 'jsonp',
success: function(resp) {
$('#target').html('Results: ' + resp.results.length);
}
});)
JSONP的通常做法是,在所要请求的URL后面加在回调函数的名称。ajax方法规定,如果所请求的网址以类似“callback=?”的形式结尾,则自动采用JSONP形式。所以,上面的代码还可以写成下面这样。
$.getJSON('/data/search.jsonp?q=a&callback=?',
function(resp) {
$('#target').html('Results: ' + resp.results.length);
}
);
文件上传
假定网页有一个文件控件。
<input type="file" id="test-input">
方法1,将文件作为表单数据上传:
var file = $('#test-input')[0].files[0];
var formData = new FormData();
formData.append('file', file);
$.ajax('myserver/uploads', {
method: 'POST',
contentType: false,
processData: false,
data: formData
});
var file = $('#test-input')[0].files[0];
$.ajax('myserver/uploads', {
method: 'POST',
contentType: file.type,
processData: false,
data: file
});
参考
JQuery系列(4) - AJAX方法的更多相关文章
- 用JQuery中的Ajax方法获取web service等后台程序中的方法
用JQuery中的Ajax方法获取web service等后台程序中的方法 1.准备需要被前台html页面调用的web Service,这里我们就用ws来代替了,代码如下: using System; ...
- $.ajax()方法详解 jquery中的ajax方法
jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(p ...
- jQuery中的$.ajax()方法
jQuery中的$.ajax()方法 $.ajax({ type:"POST", url:"../page/user.action?userId=" + use ...
- jquery中的ajax方法参数
引用来自:http://www.cnblogs.com/tylerdonet/p/3520862.html jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String ...
- jquery中的ajax方法
$.ajax()方法详解 jquery中的ajax方法参数总是记不住,这里记录一下. 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为Strin ...
- jquery中的ajax方法参数的用法和他的含义
jquery中的ajax方法参数的用法和他的含义: 1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(pos ...
- jQuery系列:Ajax
1. load(url, [data], [callback]) 1.1 解析 载入远程 HTML 文件代码并插入至 DOM 中. 语法格式: load(url, [data], [callback] ...
- jquery中的ajax方法参数总是记不住,这里记录一下。
1.url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. 2.type: 要求为String类型的参数,请求方式(post或get)默认为get.注意其他http请求方法,例如 ...
- jquery中的ajax方法详解
定义和用法ajax() 方法通过 HTTP 请求加载远程数据.该方法是 jQuery 底层 AJAX 实现.简单易用的高层实现见 $.get, $.post 等.$.ajax() 返回其创建的 XML ...
- jQuery中操作Ajax方法小结
有时候,越深入去了解一个点,越发觉得自己无知,而之前当自己晓得一两个片面的点还洋洋自得,殊不知,这是多么讽刺 jQery对Ajax操作进行了封装,常见的 ajax()属于最底层的方法,使用频率很高的 ...
随机推荐
- python语法入门之变量
目录 一.变量 1.1 什么是变量 1.2 怎么使用变量 1.3 变量名的命名规范 1.4 变量名的命名风格 1.5 变量的三大特征 2.常量 一.变量 1.1 什么是变量 # 变量就是可以变化的量, ...
- MySQL单机优化---分表、分区、分库
一.分表: 水平分表:根据条件把数据分为N个表(例如:商品表中有月份列,则可以按月份进行水平分表). 使用场景:一张表中数据太多,查询效率太慢. 当需要同时查询被水平分表的多张表时: 在两条SQL语句 ...
- js中常见的字符串方法(3)
match() match()方法只接受一个参数,要么是一个正则表达式,要么是一个 RegExp 对象. 调用这个方法本质上与调用RegExp的exec()方法相同, var text = " ...
- Java中是使用增强for的null问题
在使用List和Map等集合时,我们经常会使用增强for来进行遍历.但是这里面会存在一些问题.比如当你进行数据库查询是,得到的返回结果是List集合时,如果没有查询到符合要求的数据时List集合时nu ...
- golang微服务框架go-micro 入门笔记2.3 micro工具之消息接收和发布
本章节阐述micro消息订阅和发布相关内容 阅读本文前你可能需要进行如下知识储备 golang分布式微服务框架go-micro 入门笔记1:搭建go-micro环境, golang微服务框架go-mi ...
- Akka-CQRS(10)- gRPC on SSL/TLS 安全连接
使用gRPC作为云平台和移动前端的连接方式,网络安全应该是必须考虑的一个重点.gRPC是支持ssl/tls安全通讯机制的.用了一个周末来研究具体使用方法,实际上是一个周末的挖坑填坑过程.把这次经历记录 ...
- 【解决方案】文件上具有 Web 标记,请删除 Web 标记
错误: 无法处理文件 Form1.resx,因为它位于 Internet 或受限区域中,或者文件上具有 Web 标记.要想处理这些文件,请删除 Web 标记. 解决方法: 文件-右键-属性 点击”解 ...
- sqlserver 2005 数据库的差异备份与还原
找到一个可靠的步骤,点开链接:http://blog.csdn.net/kevindr/article/details/22154323
- 【转载】C#中List集合使用GetRange方法获取指定索引范围内的所有值
在C#的List集合中有时候需要获取指定索引位置范围的元素对象来组成一个新的List集合,此时就可使用到List集合的扩展方法GetRange方法,GetRange方法专门用于获取List集合指定范围 ...
- Charles关于Https SSLHandshake解决备忘录
抓包Https时错误提示:SSLHandshake: Received fatal alert: unknown_ca 1.准备工作,下载Charles版本 有情链接,提取码为:ghc6,其中包含 ...