<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>PageTalks &#187; ajax</title>
	<atom:link href="http://pagetalks.com/tag/ajax/feed" rel="self" type="application/rss+xml" />
	<link>http://pagetalks.com</link>
	<description>Pure Web Development &#38; Design Ideas</description>
	<lastBuildDate>Thu, 19 Jan 2012 12:06:33 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>When Ajax meets jQuery</title>
		<link>http://pagetalks.com/2008/10/08/when-ajax-meets-jquery.html</link>
		<comments>http://pagetalks.com/2008/10/08/when-ajax-meets-jquery.html#comments</comments>
		<pubDate>Thu, 09 Oct 2008 02:44:35 +0000</pubDate>
		<dc:creator>Robin</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://pagetalks.com/?p=182</guid>
		<description><![CDATA[基于AJAX的应用现在越来越多，而对于前台开发人员来说，直接和底层的HTTPRequest打交道又不是一件令人愉快的事情。jQuery既然封装了JavaScript，肯定已经考虑过AJAX应用的问题。的确，如果用jQuery... ]]></description>
			<content:encoded><![CDATA[<p>基于AJAX的应用现在越来越多，而对于前台开发人员来说，直接和底层的HTTPRequest打交道又不是一件令人愉快的事情。jQuery既然封装了JavaScript，肯定已经考虑过AJAX应用的问题。的确，如果用jQuery写AJAX会比直接用JS写方便N倍。（不知道用jQuery长了，会不会丧失对JS的知识了……）</p>
<p>这里假设大家对jQuery语法已经比较熟悉，来对ajax的一些应用作一些总结。</p>
<h3>载入静态页面</h3>
<dl>
<dt>load( url, [data], [callback] );</dt>
<dd>
<ul>
<li><strong>url (String)</strong> 请求的HTML页的URL地址</li>
<li><strong>data (Map)(可选参数) </strong>发送至服务器的 key/value 数据</li>
<li><strong>callback (Callback) (可选参数)</strong> 请求完成时(不需要是success的)的回调函数</li>
</ul>
<p>load()方法可以轻松载入静态页面内容到指定jQuery对象。</p>
<pre>$('#ajax-div').load('data.html');</pre>
<p>这样，data.html的内容将被载入到ID为ajax-div的DOM对象之内。你甚至可以通过制定ID来实现载入部分内容的Ajax操作，如：
<pre>$('#ajax-div').load('data.html#my-section');</pre>
</p>
</dd>
</dl>
<p><span id="more-182"></span></p>
<h3>实现GET和POST方法</h3>
<dl>
<dt>get( url, [data], [callback] )</dt>
<dd>
<ul>
<li><strong>url (String)</strong> 发送请求的URL地址.</li>
<li><strong>data (Map)(可选参数) </strong> 要发送给服务器的数据，以 Key/value 的键值对形式表示，会做为QueryString附加到请求URL中</li>
<li><strong>callback (Callback) (可选参数)</strong> 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)</li>
</ul>
<p>很显然这是一个专门实现GET方式的函数，使用起来也相当的简单</p>
<pre>
		$.get('login.php', {
			id      : 'Robin',
			password: '123456',
			gate    : 'index'
		}, function(data, status) {
			//data为返回对象，status为请求的状态
			alert(data);
			//此时假设服务器脚本会返回一段文字“你好，Robin！”，那么浏览器就会弹出对话框显示该段文字
			alert(status);
			//结果为success, error等等，但这里是成功时才能运行的函数
		});</pre>
</dd>
<dt>post( url, [data], [callback], [type] )</dt>
<dd>
<ul>
<li><strong>url (String)</strong> 发送请求的URL地址.</li>
<li><strong>data (Map)(可选参数) </strong> 要发送给服务器的数据，以 Key/value 的键值对形式表示</li>
<li><strong>callback (Callback) (可选参数)</strong> 载入成功时回调函数(只有当Response的返回状态是success才是调用该方法)</li>
<li><strong>type (String) (可选参数)</strong> 请求数据的类型，xml,text,json等</li>
</ul>
<p>同样是jQuery提供的一个简便函数，其实用法</p>
<pre>
		$.post('regsiter.php', {
			id:'Robin',
			password: '123456',
			type:'user'
		},function(data, status) {
			alert(data);
		}, "json");
		</pre>
</dd>
</dl>
<h3>事件驱动的脚本载入函数：getScript()</h3>
<dl>
<dt>getScript( url, [callback] )</dt>
<dd>
<ul>
<li><strong>url (String)</strong>  待载入 JS 文件地址</li>
<li><strong>callback (Function)  (可选)</strong> 成功载入后回调函数</li>
</ul>
<p>getScript()函数可以远程载入JavaScript脚本并且执行。这个函数可以跨域载入JS文件（神奇……？！）。这个函数的意义是巨大的，它可以很大程度的缩减页面初次载入的代码量，因为你可以根据用户的交互来载入相应的JS文件，而不必在页面初始化的时候全部载入。</p>
<pre>$.getScript('ajaxEvent.js', function() {
			alert("Scripts Loaded!");
			//载入ajaxEvent.js，并且在成功载入后显示对话框提示。
		});</pre>
</dd>
</dl>
<h3>构建数据通讯的桥梁：getJSON()</h3>
<dl
	<dt>getJSON(url,[data],[callback])</dt>
<dd>
<ul>
<li><strong>url (String) </strong> 发送请求地址</li>
<li><strong>data (Map) (可选)</strong> 待发送 Key/value 参数</li>
<li><strong>callback (Function) (可选)</strong> 载入成功时回调函数。</li>
</ul>
</dd>
<p>JSON是一种理想的数据传输格式，它能够很好的融合与JavaScript或其他宿主语言，并且可以被JS直接使用。使用JSON相比传统的通过GET、POST直接发送“裸体”数据，在结构上更为合理，也更为安全。至于jQuery的getJSON()函数，只是设置了JSON参数的ajax()函数的一个简化版本。这个函数也是可以跨域使用的，相比get()、post()有一定优势。另外这个函数可以通过把请求url写成&#8221;myurl?callback=X&#8221;这种格式，让程序执行回调函数X。
	</p>
<pre>$.getJSON('feed.php',{
			request: images,
			id:      001,
			size:    large
			}, function(json) {
				alert(json.images[0].link);
				//此处json就是远程传回的json对象，假设其格式如下：
				//{'images' : [
				//	{link: images/001.jpg, x :100, y : 100},
				//	{link: images/002.jpg, x : 200, y 200:}
				//]};
			}
	);
</pre>
</dl>
<h3>更底层的ajax()函数</h3>
<p>虽然get()和post()函数非常简洁易用，但是对于更复杂的一些设计需求还是无法实现，比如在ajax发送的不同时段做出不同的动作等。jQuery提供一个更为具体的函数：ajax()。</p>
<dl>
<dt>ajax( options )</dt>
<dd>
<p>ajax()提供了一大票参数，所以可以实现相当复杂的功能。</p>
<table cellspacing="0" cellpadding="0">
<tr>
<td valign="top" width="90">参数名</td>
<td valign="top" width="83">类型</td>
<td valign="top" width="419">描述</td>
</tr>
<tr>
<td valign="top" width="90"><strong>url </strong></td>
<td valign="top" width="83">String</td>
<td valign="top" width="419">(默认: 当前页地址) 发送请求的地址。</td>
</tr>
<tr>
<td valign="top" width="90"><strong>type</strong></td>
<td valign="top" width="83">String</td>
<td valign="top" width="419">(默认: &quot;GET&quot;) 请求方式 (&quot;POST&quot; 或 &quot;GET&quot;)， 默认为 &quot;GET&quot;。注意：其它 HTTP 请求方法，如 PUT 和 DELETE 也可以使用，但仅部分浏览器支持。</td>
</tr>
<tr>
<td valign="top" width="90"><strong>timeout</strong></td>
<td valign="top" width="83">Number</td>
<td valign="top" width="419">设置请求超时时间（毫秒）。此设置将覆盖全局设置。</td>
</tr>
<tr>
<td valign="top" width="90"><strong>async </strong></td>
<td valign="top" width="83">Boolean</td>
<td valign="top" width="419">(默认: true) 默认设置下，所有请求均为异步请求。如果需要发送同步请求，请将此选项设置为 false。注意，同步请求将锁住浏览器，用户其它操作必须等待请求完成才可以执行。</td>
</tr>
<tr>
<td valign="top" width="90"><strong>beforeSend </strong></td>
<td valign="top" width="83">Function</td>
<td valign="top" width="419">发送请求前可修改 XMLHttpRequest 对象的函数，如添加自定义 HTTP 头。XMLHttpRequest 对象是唯一的参数。</p>
<pre>function (XMLHttpRequest) {    this; // the options for this ajax request  }</pre>
</td>
</tr>
<tr>
<td valign="top" width="90"><strong>cache </strong></td>
<td valign="top" width="83">Boolean</td>
<td valign="top" width="419">(默认: true) jQuery 1.2 新功能，设置为 false 将不会从浏览器缓存中加载请求信息。</td>
</tr>
<tr>
<td valign="top" width="90"><strong>complete </strong></td>
<td valign="top" width="83">Function</td>
<td valign="top" width="419">请求完成后回调函数 (请求成功或失败时均调用)。参数： XMLHttpRequest 对象，成功信息字符串。</p>
<pre>function (XMLHttpRequest, textStatus) {    this; // the options for this ajax request  }</pre>
</td>
</tr>
<tr>
<td valign="top" width="90"><strong>contentType </strong></td>
<td valign="top" width="83">String</td>
<td valign="top" width="419">(默认: &quot;application/x-www-form-urlencoded&quot;) 发送信息至服务器时内容编码类型。默认值适合大多数应用场合。</td>
</tr>
<tr>
<td valign="top" width="90"><strong>data </strong></td>
<td valign="top" width="83">Object,<br />
      String</td>
<td valign="top" width="419">发送到服务器的数据。将自动转换为请求字符串格式。GET 请求中将附加在 URL  后。查看 processData 选项说明以禁止此自动转换。必须为 Key/Value 格式。如果为数组，jQuery  将自动为不同值对应同一个名称。如 {foo:[&quot;bar1&quot;, &quot;bar2&quot;]} 转换为  &#8216;&amp;foo=bar1&amp;foo=bar2&#8242;。</td>
</tr>
<tr>
<td valign="top" width="90"><strong>dataType </strong></td>
<td valign="top" width="83">String</td>
<td valign="top" width="419">
<p>预期服务器返回的数据类型。如果不指定，jQuery 将自动根据 HTTP 包 MIME 信息返回 responseXML 或 responseText，并作为回调函数参数传递，可用值: </p>
<p>&quot;xml&quot;: 返回 XML 文档，可用 jQuery 处理。 </p>
<p>&quot;html&quot;: 返回纯文本 HTML 信息；包含 script 元素。 </p>
<p>&quot;script&quot;: 返回纯文本 JavaScript 代码。不会自动缓存结果。 </p>
<p>&quot;json&quot;: 返回 JSON 数据 。 </p>
<p>&quot;jsonp&quot;: <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">JSONP</a> 格式。使用 <a href="http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/">JSONP</a> 形式调用函数时，如 &quot;myurl?callback=?&quot; jQuery 将自动替换 ? 为正确的函数名，以执行回调函数。</p>
</td>
</tr>
<tr>
<td valign="top" width="90"><strong>error </strong></td>
<td valign="top" width="83">Function</td>
<td valign="top" width="419">(默认: 自动判断 (xml 或 html)) 请求失败时将调用此方法。这个方法有三个参数：XMLHttpRequest 对象，错误信息，（可能）捕获的错误对象。</p>
<pre>function (XMLHttpRequest, textStatus, errorThrown) {    // 通常情况下textStatus和errorThown只有其中一个有值     this; // the options for this ajax request  }</pre>
</td>
</tr>
<tr>
<td valign="top" width="90"><strong>global </strong></td>
<td valign="top" width="83">Boolean</td>
<td valign="top" width="419">(默认: true) 是否触发全局 AJAX 事件。设置为 false 将不会触发全局 AJAX 事件，如 ajaxStart 或 ajaxStop 。可用于控制不同的Ajax事件</td>
</tr>
<tr>
<td valign="top" width="90"><strong>ifModified </strong></td>
<td valign="top" width="83">Boolean</td>
<td valign="top" width="419">(默认: false) 仅在服务器数据改变时获取新数据。使用 HTTP 包 Last-Modified 头信息判断。</td>
</tr>
<tr>
<td valign="top" width="90"><strong>processData </strong></td>
<td valign="top" width="83">Boolean</td>
<td valign="top" width="419">(默认: true) 默认情况下，发送的数据将被转换为对象(技术上讲并非字符串) 以配合默认内容类型 &quot;application/x-www-form-urlencoded&quot;。如果要发送 DOM 树信息或其它不希望转换的信息，请设置为 false。</td>
</tr>
<tr>
<td valign="top" width="90"><strong>success </strong></td>
<td valign="top" width="83">Function</td>
<td valign="top" width="419">请求成功后回调函数。这个方法有两个参数：服务器返回数据，返回状态</p>
<pre>function (data, textStatus) {    // data could be xmlDoc, jsonObj, html, text, etc...    this; // the options for this ajax request  }</pre>
</td>
</tr>
</table>
<p>你可以指定xml、script、html、json作为其数据类型，可以为beforeSend、error、sucess、complete等状态设置处理函数，众多其它参数也可以订完完全全定义用户的Ajax体验。下面的例子中，我们用ajax()来调用一个XML文档：</p>
<pre>
$.ajax({
    url: 'doc.xml',
    type: 'GET',
    dataType: 'xml',
    timeout: 1000,
    error: function(){
        alert('Error loading XML document');
    },
    success: function(xml){
        alert(xml);
		//此处xml就是XML的jQuery对象了，你可以用find()、next()或XPath等方法在里面寻找节点，和用jQuery操作HTML对象没有区别
    }
});
</pre>
</dd>
</dl>
<h3>进一步了解AJAX事件</h3>
<p>前面讨论的一些方法都有自己的事件处理机制，从页面整体来说，都只能说是局部函数。jQuery提供了AJAX全局函数的定义，以满足特殊的需求。下面是jQuery提供的所有函数（按照触发顺序排列如下）：</p>
<dl>
<dt>ajaxStart</dt>
<dd> (全局事件)<br />
开始新的Ajax请求，并且此时没有其他ajax请求正在进行</dd>
<dt>beforeSend </dt>
<dd> (局部事件)<br />
当一个Ajax请求开始时触发。如果需要，你可以在这里设置XMLHttpRequest对象</dd>
<dt>ajaxSend </dt>
<dd> (全局事件)<br />
请求开始前触发的全局事件</dd>
<dt>success </dt>
<dd> (局部事件)<br />
请求成功时触发。即服务器没有返回错误，返回的数据也没有错误</dd>
<dt>ajaxSuccess </dt>
<dd> 全局事件<br />
全局的请求成功</dd>
<dt>error </dt>
<dd> (局部事件)<br />
仅当发生错误时触发。你无法同时执行success和error两个回调函数</dd>
<dt>ajaxError </dt>
<dd>  全局事件<br />
全局的发生错误时触发</dd>
<dt>complete  </dt>
<dd> (局部事件)<br />
不管你请求成功还是失败，即便是同步请求，你都能在请求完成时触发这个事件</dd>
<dt>ajaxComplete  </dt>
<dd> 全局事件<br />
全局的请求完成时触发</dd>
<dt>ajaxStop  </dt>
<dd> (全局事件)<br />
当没有Ajax正在进行中的时候，触发</dd>
</dl>
<p>局部事件在之前的函数中都有介绍，我们主要来看看全局事件。对某个对象进行全局事件监听，那么全局中的AJAX动作，都会对其产生影响。比如，当页面在进行AJAX操作时，ID为“loading&#8221;的DIV就显示出来：</p>
<pre>$("#loading").ajaxStart(function(){
   $(this).show();
 });
</pre>
<p>全局事件也可以帮助你编写全局的错误相应和成功相应，而不需要为每个AJAX请求独立设置。<br />
有必要指出，全局事件的参数是很有用的。除了ajaxStart、ajaxOptions，其他事件均有event, XMLHttpRequest, ajaxOptions三个参数。<br />
第一个参数即事件本身；第二个是XHR对象；第三个是你传递的ajax参数对象。<br />
在一个对象里显示全局的AJAX情况：</p>
<pre>$("#msg").beforeSend(function(e,xhr,o) {
	$(this).html("正在请求"+o.url);
	}).ajaxSuccess(function(e,xhr,o) {
	$(this).html(o.url+"请求成功");
	}).ajaxError(function(e,xhr,o) {
	$(this).html(o.url+"请求失败");
});
</pre>
<p>很显然，第三个参数也可以帮助你传递你在AJAX事件里加入的自定义参数。</p>
<p>在单个AJAX请求时，你可以将global的值设为false，以将此请求独立于AJAX的全局事件。</p>
<pre> $.ajax({
   url: "request.php",
   global: false,
   // 禁用全局Ajax事件.
 });
</pre>
<p>如果你想为全局AJAX设置参数，你会用上ajaxSetup()函数。例如，将所有AJAX请求都传递到request.php，；禁用全局方法；强制用POST方法传递：</p>
<pre>$.ajaxSetup({
  url: "request.php",
  global: false,
  type: "POST"
});
</pre>
<h3>一些你不得不知道的方法</h3>
<p>写AJAX肯定离不开从页面获取相应的值。在这里简单列举一些方法：</p>
<dl>
<dt>val()</dt>
<dd>val()函数可以返回表单组建的值，例如任何种类input的值。配合选择符操作，你可以轻易获取选项组、输入框、按钮等元素的值。
<pre>$("input[name='info']:text").val();
//返回名字为info的文本框的值
$("input[name='pass']:password").val();
//返回名字为pass的密码框的值
$("input[name='save']:radio").val();
//返回名字为save的单选项的值
//以此类推
</pre>
</dd>
<dt>
serialize()</dt>
<dd>serialize函数可以帮你把表单对象的所有值都转换为字符串序列。如果你要写GET格式的请求，这个就非常方便了。</dd>
<dt>serializeArray()</dt>
<dd>和serialize()类似，只不过它返回的是JSON对象。</dd>
</dl>
<h3>AJAX应用参考</h3>
<ul>
<li>(WordPress) 使用 jQuery 实现 Ajax 留言 : <a href="http://hellobmw.com/archives/ajax-comments-with-jquery-for-wordpress.html" target="_blank">http://hellobmw.com/archives/ajax-comments-with-jquery-for-wordpress.html</a></li>
<li>利用JQuery方便实现基于Ajax的数据查询、排序和分页功能 : <a href="http://www.malsup.com/jquery/form/" target="_blank">http://www.malsup.com/jquery/form/</a></p>
<p><a href="http://www.cnblogs.com/henryfan/archive/2007/01/27/631954.html" target="_blank">http://www.cnblogs.com/henryfan/archive/2007/01/27/631954.html</a></li>
<li>jQuery &#8211; ajax无刷新保存例子 : <a href="http://www.phpchina.com/1296/viewspace_12580.html" target="_blank">http://www.phpchina.com/1296/viewspace_12580.html</a></li>
</ul>
<h3>参考文献</h3>
<ul>
<li>使用 jQuery 简化 Ajax 开发 : <a href="http://www.ibm.com/developerworks/cn/xml/x-ajaxjquery.html" target="_blank">http://www.ibm.com/developerworks/cn/xml/x-ajaxjquery.html</a></li>
<li>jQuery Official Documention : <a href="http://docs.jquery.com/Ajax" target="_blank">http://docs.jquery.com/Ajax</a></li>
<li>jQuery Ajax 全解析 : <a href="http://www.cnblogs.com/QLeelulu/archive/2008/04/21/1163021.html" target="_blank">http://www.cnblogs.com/QLeelulu/archive/2008/04/21/1163021.html</a></li>
<li>jQuery中Ajax事件 : <a href="http://shawphy.com/2008/08/ajax-event-in-jquery.html" target="_blank">http://shawphy.com/2008/08/ajax-event-in-jquery.html</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://pagetalks.com/2008/10/08/when-ajax-meets-jquery.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
<!-- WP Super Cache is installed but broken. The path to wp-cache-phase1.php in wp-content/advanced-cache.php must be fixed! -->
