Cyh的博客

Email:kissyan4916@163.com
posts - 26, comments - 19, trackbacks - 0, articles - 220

(转)jQuery入门(6):Ajax

Posted on 2010-01-25 00:02 啥都写点 阅读(346) 评论(0)  编辑  收藏 所属分类: JavaScript

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 + " ");

});



                                                                                                       --    学海无涯