jQuery入门(6):Ajax
Ajax
Ajax请求
jQuery.ajax(options)
说明:通过 HTTP 请求加载远程数据。
$.ajax()返回其创建的XMLHttpRequest对象。大多数情况下你无需直接操作该对象,但特殊情况下可用于手动终止请求。
注意: 如果你指定了dataType选项,请确保服务器返回正确的MIME信息,(如xml返回 "text/xml")。错误的 MIME 类型可能导致不可预知的错误。
$.ajax()只有一个参数:参数 key/value 对象,包含各配置及回调函数信息。
1.2 中可以跨域加载JSON数据,使用时需将数据类型设置为JSONP。使用JSON 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换?为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时,jQuery 将自动调用回调函数。
选项
async(Boolean):(默认: true)所有请求均为异步请求。如要发送同步请求,设置为false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
beforeSend(Function):发送请求前可修改XMLHttpRequest对象的函数,如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。
cache(Boolean):(默认: true) 设置为fals 将不会从浏览器缓存中加载请求信息。
complete(Function): 请求完成后回调函数(请求成功或失败时均调用)。参数: XMLHttpRequest 对象,成功信息字符串。
contentType(String): (默认: "application/x-www-form-urlencoded") 发送信息至服务器时内容编码类型。默认值适合大多数应用场合。
data(Object,String): 发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL 后。查看 processData 选项说明以禁止此自动转换。必须为Key/Value 格式。如果为数组,jQuery 将自动为不同值对应同一个名称。如 {foo:["bar1", "bar2"]} 转换为 '&foo=bar1&foo=bar2'。
dataType(String) : 预期服务器返回的数据类型。如果不指定,jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText,并作为回调函数参数传递,可用值:
"xml": 返回 XML 文档,可用 jQuery 处理。
"html": 返回纯文本 HTML 信息;包含 script 元素。
"script": 返回纯文本 JavaScript 代码。不会自动缓存结果。
"json": 返回 JSON 数据 。
"jsonp": JSONP 格式。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
error(Function) : (默认:自动判断 (xml 或 html)) 请求失败时调用时间。参数:XMLHttpRequest 对象,错误信息,(可能)捕获的错误对象。
global (Boolean) : (默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件,如 ajaxStart 或 ajaxStop 可用于控制不同的Ajax事件。
ifModified (Boolean) : (默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。
processData (Boolean) : (默认: true) 默认情况下,发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 "application/x-www-form-urlencoded"。如果要发送 DOM 树信息或其它不希望转换的信息,请设置为 false。
success (Function) : 请求成功后回调函数。参数:服务器返回数据,数据格式。
timeout (Number) : 设置请求超时时间(毫秒)。此设置将覆盖全局设置。
type (String) : (默认: "GET") 请求方式 ("POST" 或 "GET"), 默认为 "GET"。注意:其它 HTTP 请求方法,如 PUT 和 DELETE 也可以使用,但仅部分浏览器支持。
url (String) : (默认: 当前页地址) 发送请求的地址。
加载并执行一个 JS 文件。
$.ajax({
type: "GET",
url: "test.js",
dataType: "script"
});
保存数据到服务器,成功时显示信息。
$.ajax({
type: "POST",
url: "some.php",
data: "name=John&location=Boston",
success: function(msg){
alert( "Data Saved: " + msg );
}
});
装入一个 HTML 网页最新版本。
$.ajax({
url: "test.html",
cache: false,
success: function(html){
$("#results").append(html);
}
});
同步加载数据。发送请求时锁住浏览器。需要锁定用户交互操作时使用同步方式。
var html = $.ajax({
url: "some.php",
async: false
}).responseText;
发送 XML 数据至服务器。设置 processData 选项为 false,防止自动转换数据格式。
var xmlDocument = [create xml document];
$.ajax({
url: "page.php",
processData: false,
data: xmlDocument,
success: handleResponse
});
load( url, [data], [callback] ) :载入远程 HTML 文件代码并插入至 DOM 中,默认使用 GET 方式 - 传递附加参数时自动转换为 POST 方式。
url (String) : 请求的HTML页的URL地址。
data (Map) : (可选参数) 发送至服务器的 key/value 数据。如果有[data]参数,就会自动转换为POST方式。
callback (Callback) : (可选参数) 请求完成时(不需要是success的)的回调函数。
示例代码:
$(".ajax.load").load("http://www.cnblogs.com/QLeelulu/archive/2008/03/30/1130270.html",
function (responseText, textStatus, XMLHttpRequest){
this;//在这里this指向的是当前的DOM对象,即$(".ajax.load")[0]
//alert(responseText);//请求返回的内容
//alert(textStatus);//请求状态:success,error
//alert(XMLHttpRequest);//XMLHttpRequest对象
});
注:不知道为什么URL写绝对路径在FF下会出错。下面的get()和post()示例使用的是绝对路径,所以在FF下你将会出错并不会看到返回结果。
<b>jQuery Links:</b><ul id="links"></ul>
代码:$("#links").load("/Main_Page #p-Getting-Started li");
代码:加载 feeds.html 文件内容。
$("#feeds").load("feeds.html");
代码:以 POST 形式发送附加参数并在成功时显示信息。
$("#feeds").load("feeds.php", {limit: 25}, function(){
alert("The last 25 entries in the feed have been loaded");
});
jQuery.get(url,[data],[callback]):通过远程 HTTP GET 请求载入信息
示例代码:
$.get("./Ajax.aspx", {Action:"get",Name:"lulu"}, function (data, textStatus){
//返回的 data 可以是 xmlDoc, jsonObj, html, text, 等等.
this; // 在这里this指向的是Ajax请求的选项配置信息
alert(data);
//alert(textStatus);//请求状态:success,error等等。当然这里捕捉不到error,因为error的时候根本不会运行该回调函数
//alert(this);
});
请求 test.php 网页,忽略返回值。 $.get("test.php");
$.get("test.php", { name: "John", time: "2pm" } );
显示 test.php 返回值(HTML 或 XML,取决于返回值)。
$.get("test.php", function(data){
alert("Data Loaded: " + data);
});
显示 test.cgi 返回值(HTML 或 XML,取决于返回值),添加一组请求参数。
$.get("test.cgi", { name: "John", time: "2pm" },
function(data){
alert("Data Loaded: " + data);
});
jQuery.getJSON(url,data,callback):通过 HTTP GET 请求载入 JSON 数据
从 Flickr JSONP API 载入 4 张最新的关于猫的图片。
<div id="images"></div>
代码:
$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
function(data){
$.each(data.items, function(i,item){
$("<img/>").attr("src",
item.media.m).appendTo("#images");
if ( i == 3 ) return false;
});
});
从 test.js 载入 JSON 数据并显示 JSON 数据中一个 name 字段数据。
$.getJSON("test.js", function(json){
alert("JSON Data: " + json.users[3].name);
});
从 test.js 载入 JSON 数据,附加参数,显示 JSON 数据中一个 name 字段数据。
$.getJSON("test.js", { name: "John", time: "2pm" }, function(json){
alert("JSON Data: " + json.users[3].name);
});
jQuery.getScript(url,callback):通过 HTTP GET 请求载入并执行一个 JavaScript 文件。
载入 jQuery 官方颜色动画插件 成功后绑定颜色变化动画。
<button id="go">» Run</button>
<div class="block"></div>
代码:
jQuery.getScript("http://dev.jquery.com/view/trunk/plugins/color/jquery.color.js",
function(){
$("#go").click(function(){
$(".block").animate( { backgroundColor: 'pink' }, 1000)
.animate( { backgroundColor: 'blue' }, 1000);
});
});
加载并执行 test.js。 $.getScript("test.js");
加载并执行 test.js ,成功后显示信息。
$.getScript("test.js", function(){
alert("Script loaded and executed.");
});
jQuery.post(url,data,callback,type):通过远程 HTTP POST 请求载入信息
url (String) : 发送请求的URL地址.
data (Map) : (可选) 要发送给服务器的数据,以 Key/value 的键值对形式表示。
callback (Function) : (可选) 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)。
type (String) : (可选)官方的说明是:Type of data to be sent。其实应该为客户端请求的类型(JSON,XML,等等)
示例代码:
Ajax.aspx:
Response.ContentType = "application/json";
Response.Write("{result: '" + Request["Name"] + ",你好!(这消息来自服务器)'}");
代码:
$.post("Ajax.aspx", { Action: "post", Name: "lulu" },
function (data, textStatus){
// data 可以是 xmlDoc, jsonObj, html, text, 等等.
//this; // 这个Ajax请求的选项配置信息,请参考jQuery.get()说到的this
alert(data.result);
}, "json");
Ajax事件
ajaxComplete(callback):AJAX 请求完成时执行函数。
$("#msg").ajaxComplete(function(request, settings){
$(this).append("<li>Request Complete.</li>");
});
ajaxError(callback):AJAX 请求发生错误时执行函数
$("#msg").ajaxError(function(request, settings){
$(this).append("<li>Error requesting page " + settings.url +
"</li>");
});
ajaxSend(callback):AJAX 请求发送前执行函数
$("#msg").ajaxSend(function(evt, request, settings){
$(this).append("<li>Starting request at " + settings.url +
"</li>");
});
ajaxStart(callback):AJAX 请求开始时执行函数
$("#loading").ajaxStart(function(){
$(this).show();
});
ajaxStop(callback):AJAX 请求结束时执行函数
$("#loading").ajaxStop(function(){
$(this).hide();
});
ajaxSuccess(callback):AJAX 请求成功时执行函数
$("#msg").ajaxSuccess(function(evt, request, settings){
$(this).append("<li>Successful Request!</li>");
});
其它
jQuery.ajaxSetup(options):设置全局 AJAX 默认选项
$.ajaxSetup({
url: "/xmlhttp/",
global: false,
type: "POST"
});
$.ajax({ data: myData });
serialize():序列表表格内容为字符串。
$("#results").append( "<tt>" + $("form").serialize() + "</tt>" );
serializeArray():序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据
var fields = $("select, :radio").serializeArray();
jQuery.each( fields, function(i, field){
$("#results").append(field.value + " ");
});