jquery中的ajax (二)

本文介绍jQuery提供的Ajax辅助函数,包括设置全局Ajax默认选项、序列化表单内容为字符串、序列化表单元素为JSON数据,及如何配置全局Ajax事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[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选项:
$.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&param=Multiple&param=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事件的触发.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值