[size=large][b]jQuery提供了一些相关函数能够辅助Ajax函数.[/b][/size]
[b]1. jQuery.ajaxSetup( options )设置全局 AJAX 默认选项。[/b]
讲解:
有时我们的希望设置页面上所有Ajax属性的默认行为.那么就可以使用此函数设置options选项, 此后所有的Ajax请求的默认options将被更改.
options是一个对象, 可以设置的属性请此连接:
[url]http://docs.jquery.com/Ajax/jQuery.ajax#toptions[/url]
比如在页面加载时, 我使用下面的代码设置Ajax的默认option选项:
上面的代码设置了一个Ajax请求需要的基本数据: 请求url, 参数, 请求类型, 成功后的回调函数.
此后我们可以使用无参数的get(), post()或者ajax()方法发送ajax请求.完整的示例代码如下:
注意当使用get()或者post()方法时, 除了type参数将被重写为"GET"或者"POST"外, 其他参数只要不传递都是使用默认的全局option. 如果传递了某一个选项, 比如最后一个按钮传递了url和参数, 则本次调用会以传递的选项为准. 没有传递的选项比如回调函数还是会使用全局option设置值.
[b]2.serialize()序列表表格内容为字符串,用于 Ajax 请求。[/b]
讲解:
序列化最常用在将表单数据发送到服务器端时. 被序列化后的数据是标准格式, 可以被几乎所有的而服务器端支持.
为了尽可能正常工作, 要求被序列化的表单字段都有name属性, 只有一个eid是无法工作的.
像这样写name属性:
serialize()函数将要发送给服务器的form中的表单对象拼接成一个字符串. 便于我们使用Ajax发送时获取表单数据. 这和一个From按照Get方式提交时, 自动将表单对象的名/值放到url上提交差不多.
事例代码:
结果是:single=Single¶m=Multiple¶m=Multiple3&check=check2&radio=radio1
[b]3.serializeArray():序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。[/b]
注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第三方库进行字符串化操作。
在JSON官网上没有找到合适的JSON编译器, 最后选用了jquery.json这个jQuery插件:
[url]http://code.google.com/p/jquery-json/[/url]
使用起来异常简单:
使用serializeArray( ) 再配合 $.toJSON 方法, 我们可以很方便的获取表单对象的JSON, 并且转换为JSON字符串:
结果为:
[b]4.在jQuery.ajaxSetup( options ) 中的options参数属性中, 有一个global属性:[/b]
说明:是否触发全局的Ajax事件.
这个属性用来设置是否触发全局的Ajax事件. 全局Ajax事件是一系列伴随Ajax请求发生的事件.主要有如下事件:
[table]
|名称 |说明
|ajaxComplete( callback ) |AJAX 请求完成时执行函数
|ajaxError( callback ) |AJAX 请求发生错误时执行函数
|ajaxSend( callback ) |AJAX 请求发送前执行函数
|ajaxStart( callback ) |AJAX 请求开始时执行函数
|ajaxStop( callback ) |AJAX 请求结束时执行函数
|ajaxSuccess( callback ) |AJAX 请求成功时执行函数
[/table]
用一个示例讲解各个事件的触发顺序:
结果如图:
[img]http://dl.iteye.com/upload/attachment/189543/0f05d3e5-b1cb-3ec1-a886-620808eb61ad.png[/img]
我们可以通过将默认options的global属性设置为false来取消全局Ajax事件的触发.
[b]1. jQuery.ajaxSetup( options )设置全局 AJAX 默认选项。[/b]
讲解:
有时我们的希望设置页面上所有Ajax属性的默认行为.那么就可以使用此函数设置options选项, 此后所有的Ajax请求的默认options将被更改.
options是一个对象, 可以设置的属性请此连接:
[url]http://docs.jquery.com/Ajax/jQuery.ajax#toptions[/url]
比如在页面加载时, 我使用下面的代码设置Ajax的默认option选项:
$.ajaxSetup({
url: "productOper.do?method=test",
data: { "item": "test" },
global: false,
type: "POST",
success: function(data, textStatus) { $("#divResult").html(data); }
});
上面的代码设置了一个Ajax请求需要的基本数据: 请求url, 参数, 请求类型, 成功后的回调函数.
此后我们可以使用无参数的get(), post()或者ajax()方法发送ajax请求.完整的示例代码如下:
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ajax</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$.ajaxSetup({
url: "productOper.do?method=test",
data: { "item": "item1" },
global: false,
type: "POST",
success: function(data, textStatus) { $("#divResult").html(data); }
});
$("#btnAjax").click(function(event) { $.ajax(); });
$("#btnGet").click(function(event) { $.get(); });
$("#btnPost").click(function(event) { $.post(); });
$("#btnGet2").click(function(event) { $.get("productOper.do?method=test2",{ "item": "other" }); });
});
</script>
</head>
<body>
<s:form>
<ul id="nav-one">
<li>
<a id="item" href="#item1">item 1</a>
</li>
</ul>
<button id="btnAjax">不传递参数调用ajax()方法</button><br />
<button id="btnGet">不传递参数调用get()方法</button><br />
<button id="btnPost">不传递参数调用post()方法</button><br />
<button id="btnGet2">传递参数调用get()方法, 使用全局的默认回调函数</button><br />
<br />
<div id="divResult"></div>
<s:submit id="testAjax" value="提交"></s:submit>
</s:form>
</body>
</html>
注意当使用get()或者post()方法时, 除了type参数将被重写为"GET"或者"POST"外, 其他参数只要不传递都是使用默认的全局option. 如果传递了某一个选项, 比如最后一个按钮传递了url和参数, 则本次调用会以传递的选项为准. 没有传递的选项比如回调函数还是会使用全局option设置值.
[b]2.serialize()序列表表格内容为字符串,用于 Ajax 请求。[/b]
讲解:
序列化最常用在将表单数据发送到服务器端时. 被序列化后的数据是标准格式, 可以被几乎所有的而服务器端支持.
为了尽可能正常工作, 要求被序列化的表单字段都有name属性, 只有一个eid是无法工作的.
像这样写name属性:
<input id="email" name="email" type="text" />
serialize()函数将要发送给服务器的form中的表单对象拼接成一个字符串. 便于我们使用Ajax发送时获取表单数据. 这和一个From按照Get方式提交时, 自动将表单对象的名/值放到url上提交差不多.
事例代码:
<s:form>
<select name="single">
<option>Single</option>
<option>Single2</option>
</select>
<select name="multiple" multiple="multiple">
<option selected="selected">Multiple</option>
<option>Multiple2</option>
<option selected="selected">Multiple3</option>
</select><br/>
<input type="checkbox" name="check" value="check1"/> check1
<input type="checkbox" name="check" value="check2" checked="checked"/> check2
<input type="radio" name="radio" value="radio1" checked="checked"/> radio1
<input type="radio" name="radio" value="radio2"/> radio2
<s:submit id="testAjax" value="提交" onclick="alert($('form').serialize())"></s:submit>
</s:form>
结果是:single=Single¶m=Multiple¶m=Multiple3&check=check2&radio=radio1
[b]3.serializeArray():序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。[/b]
$("form").serializeArray()
注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第三方库进行字符串化操作。
在JSON官网上没有找到合适的JSON编译器, 最后选用了jquery.json这个jQuery插件:
[url]http://code.google.com/p/jquery-json/[/url]
使用起来异常简单:
var thing = {plugin: 'jquery-json', version: 2.2};
var encoded = $.toJSON(thing); //'{"plugin":"jquery-json","version":2.2}'
var name = $.evalJSON(encoded).plugin; //"jquery-json"
var version = $.evalJSON(encoded).version; // 2.2
使用serializeArray( ) 再配合 $.toJSON 方法, 我们可以很方便的获取表单对象的JSON, 并且转换为JSON字符串:
$("#results").html( $.toJSON( $("form").serializeArray() ));
结果为:
[{"name": "single", "value": "Single"}, {"name": "param", "value": "Multiple"}, {"name": "param", "value": "Multiple3"}, {"name": "check", "value": "check2"}, {"name": "radio", "value": "radio1"}]
[b]4.在jQuery.ajaxSetup( options ) 中的options参数属性中, 有一个global属性:[/b]
说明:是否触发全局的Ajax事件.
这个属性用来设置是否触发全局的Ajax事件. 全局Ajax事件是一系列伴随Ajax请求发生的事件.主要有如下事件:
[table]
|名称 |说明
|ajaxComplete( callback ) |AJAX 请求完成时执行函数
|ajaxError( callback ) |AJAX 请求发生错误时执行函数
|ajaxSend( callback ) |AJAX 请求发送前执行函数
|ajaxStart( callback ) |AJAX 请求开始时执行函数
|ajaxStop( callback ) |AJAX 请求结束时执行函数
|ajaxSuccess( callback ) |AJAX 请求成功时执行函数
[/table]
用一个示例讲解各个事件的触发顺序:
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>ajax</title>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<meta name="robots" content="noindex, nofollow" />
<script type="text/javascript" src="js/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function()
{
$("#btnAjax").bind("click", function(event)
{
$.get("productOper.do?method=test2");
})
$("#divResult").ajaxComplete(function(evt, request, settings) { $(this).append('<div>ajaxComplete</div>'); })
$("#divResult").ajaxError(function(evt, request, settings) { $(this).append('<div>ajaxError</div>'); })
$("#divResult").ajaxSend(function(evt, request, settings) { $(this).append('<div>ajaxSend</div>'); })
$("#divResult").ajaxStart(function() { $(this).append('<div>ajaxStart</div>'); })
$("#divResult").ajaxStop(function() { $(this).append('<div>ajaxStop</div>'); })
$("#divResult").ajaxSuccess(function(evt, request, settings) { $(this).append('<div>ajaxSuccess</div>'); })
});
</script>
</head>
<body>
<s:form>
<br /><button id="btnAjax">发送Ajax请求</button><br/>
<div id="divResult"></div>
</s:form>
</body>
</html>
结果如图:
[img]http://dl.iteye.com/upload/attachment/189543/0f05d3e5-b1cb-3ec1-a886-620808eb61ad.png[/img]
我们可以通过将默认options的global属性设置为false来取消全局Ajax事件的触发.