[导读] 一 摘要本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍 本篇文章讲解如何使用jQuery方便快捷的实现Ajax功能 统一所有开发人员使
一.摘要
本系列文章将带您进入jQuery的精彩世界, 其中有很多作者具体的使用经验和解决方案, 即使你会使用jQuery也能在阅读中发现些许秘籍.
本篇文章讲解如何使用jQuery方便快捷的实现Ajax功能.统一所有开发人员使用Ajax的方式.
二.前言
Ajax让用户页面丰富起来, 增强了用户体验. 使用Ajax是所有Web开发的必修课. 虽然Ajax技术并不复杂, 但是实现方式还是会因为每个开发人员的而有所差异.jQuery提供了一系列Ajax函数来帮助我们统一这种差异, 并且让调用Ajax更加简单.
三.原始Ajax与jQuery中的Ajax
首先通过实例, 来看一下jQuery实现Ajax有多简单. 下面是一个使用原始Ajax的示例:
01.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
02.
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
03.
<
head
>
04.
<
title
>jQuery Ajax</
title
>
05.
<
script
type
=
"text/javascript"
>
06.
$(function()
07.
{
08.
var xhr = new AjaxXmlHttpRequest();
09.
$("#btnAjaxOld").click(function(event)
10.
{
11.
var xhr = new AjaxXmlHttpRequest();
12.
xhr.onreadystatechange = function()
13.
{
14.
if (xhr.readyState == 4)
15.
{
16.
document.getElementById("divResult").innerHTML = xhr.responseText;
17.
}
18.
}
19.
xhr.open("GET", "data/AjaxGetCityInfo.aspx?resultType=html", true);
20.
xhr.send(null);
21.
});
22.
})
23.
24.
//跨浏览器获取XmlHttpRequest对象
25.
function AjaxXmlHttpRequest()
26.
{
27.
var xmlHttp;
28.
try
29.
{
30.
// Firefox, Opera 8.0+, Safari
31.
xmlHttp = new XMLHttpRequest();
32.
}
33.
catch (e)
34.
{
35.
36.
// Internet Explorer
37.
try
38.
{
39.
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
40.
}
41.
catch (e)
42.
{
43.
44.
try
45.
{
46.
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
47.
}
48.
catch (e)
49.
{
50.
alert("您的浏览器不支持AJAX!");
51.
return false;
52.
}
53.
}
54.
}
55.
return xmlHttp;
56.
}
57.
</
script
>
58.
59.
</
head
>
60.
<
body
>
61.
<
button
id
=
"btnAjaxOld"
>原始Ajax调用</
button
><
br
/>
62.
<
br
/>
63.
<
div
id
=
"divResult"
></
div
>
64.
</
body
>
65.
</
html
>
上面的实例中, data/AjaxGetCityInfo.aspx?resultType=html 地址会返回一段HTML代码.
使用原始Ajax, 我们需要做较多的事情, 比如创建XmlHttpRequest对象, 判断请求状态, 编写回调函数等.
而用jQuery的Load方法, 只需要一句话:
$("#divResult").load("data/AjaxGetCityInfo.aspx", { "resultType": "html" });
曾经我是一个原始Ajax的绝对拥护者, 甚至摒弃微软的Asp.net Ajax, 因为我想要最高的代码灵活度. 使用原始Ajax让我感觉完成自己的工作更加轻松, 即使多写了一些代码. 但是当我去翻看别人的Ajax代码并且尝试修改的时候, 我改变了我的看法--我们的代码到处分布着创建XmlHttpRequest方法的函数, 或者某些Ajax程序逻辑性和结构性很差, 很难看懂.
我们可以将通用方法放到一个js文件中, 然后告诉大家"嘿伙伴们, 都来用这个js中的方法". 但是在某些时候有些新来的外包人员并不知道有这个js文件的存在. 而且其实这个通用的js就是一个公共的脚本类库, 我相信没有人会觉得自己开发一个类库会比jQuery更好!
所以我放弃了制造轮子的计划, 大家都使用jQuery编写Ajax相关的方法就可以解决各种差异性问题, 并且让工作更有效率.
现在只是用jQuery的Ajax函数, 我的页面变得简洁了:
01.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
02.
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
03.
<
head
>
04.
<
title
>jQuery Ajax</
title
>
05.
<
script
type
=
"text/javascript"
src
=
"scripts/jquery-1.3.2-vsdoc2.js"
></
script
>
06.
<
script
type
=
"text/javascript"
>
07.
$(function()
08.
{
09.
$("#btnAjaxJquery").click(function(event)
10.
{
11.
$("#divResult").load("data/AjaxGetCityInfo.aspx", { "resultType": "html" });
12.
});
13.
})
14.
</
script
>
15.
</
head
>
16.
<
body
>
17.
<
button
id
=
"btnAjaxJquery"
>使用jQuery的load方法</
button
>
18.
<
br
/>
19.
<
div
id
=
"divResult"
></
div
>
20.
</
body
>
21.
</
html
>
四.jQuery Ajax详解
jQuery提供了几个用于发送Ajax请求的函数. 其中最核心也是最复杂的是jQuery.ajax( options ),所有的其他Ajax函数都是它的一个简化调用. 当我们想要完全控制Ajax时可以使用此结果, 否则还是使用简化方法如get, post, load等更加方便. 所以jQuery.ajax( options ) 方法放到最后一个介绍. 先来介绍最简单的load方法:
1. load( url, [data], [callback] )
Returns: jQuery包装集
说明:
load方法能够载入远程 HTML 文件代码并插入至 DOM 中。
默认使用 GET 方式, 如果传递了data参数则使用Post方式.
- 传递附加参数时自动转换为 POST 方式。jQuery 1.2 中,可以指定选择符,来筛选载入的 HTML 文档,DOM 中将仅插入筛选出的 HTML 代码。语法形如 "url #some > selector", 默认的选择器是"body>*".
讲解:
load是最简单的Ajax函数, 但是使用具有局限性:
- 它主要用于直接返回HTML的Ajax接口
- load是一个jQuery包装集方法,需要在jQuery包装集上调用,并且会将返回的HTML加载到对象中, 即使设置了回调函数也还是会加载.
不过不可否认load接口设计巧妙并且使用简单.下面通过示例来演示Load接口的使用:
01.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
02.
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
03.
<
head
>
04.
<
title
>jQuery Ajax - Load</
title
>
05.
06.
<
script
type
=
"text/javascript"
src
=
"../scripts/jquery-1.3.2-vsdoc2.js"
></
script
>
07.
08.
<
script
type
=
"text/javascript"
>
09.
$(function()
10.
{
11.
$("#btnAjaxGet").click(function(event)
12.
{
13.
//发送Get请求
14.
$("#divResult").load("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click" + "×tamp=" + (new Date()).getTime());
15.
});
16.
17.
$("#btnAjaxPost").click(function(event)
18.
{
19.
//发送Post请求
20.
$("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxPost_click" });
21.
});
22.
23.
$("#btnAjaxCallBack").click(function(event)
24.
{
25.
//发送Post请求, 返回后执行回调函数.
26.
$("#divResult").load("../data/AjaxGetMethod.aspx", { "param": "btnAjaxCallBack_click" }, function(responseText, textStatus, XMLHttpRequest)
27.
{
28.
responseText = " Add in the CallBack Function! <
br
/>" + responseText
29.
$("#divResult").html(responseText); //或者: $(this).html(responseText);
30.
});
31.
});
32.
33.
$("#btnAjaxFiltHtml").click(function(event)
34.
{
35.
//发送Get请求, 从结果中过滤掉 "鞍山" 这一项
36.
$("#divResult").load("../data/AjaxGetCityInfo.aspx?resultType=html" + "×tamp=" + (new Date()).getTime() + " ul>li:not(:contains('鞍山'))");
37.
});
38.
39.
})
40.
</
script
>
41.
42.
</
head
>
43.
<
body
>
44.
<
button
id
=
"btnAjaxGet"
>使用Load执行Get请求</
button
><
br
/>
45.
<
button
id
=
"btnAjaxPost"
>使用Load执行Post请求</
button
><
br
/>
46.
<
button
id
=
"btnAjaxCallBack"
>使用带有回调函数的Load方法</
button
><
br
/>
47.
<
button
id
=
"btnAjaxFiltHtml"
>使用selector过滤返回的HTML内容</
button
>
48.
<
br
/>
49.
<
div
id
=
"divResult"
></
div
>
50.
</
body
>
51.
</
html
>
上面的示例演示了如何使用Load方法.
提示:我们要时刻注意浏览器缓存, 当使用GET方式时要添加时间戳参数 (net Date()).getTime() 来保证每次发送的URL不同, 可以避免浏览器缓存.
提示: 当在url参数后面添加了一个空格, 比如" "的时候, 会出现"无法识别符号"的错误, 请求还是能正常发送. 但是无法加载HTML到DOM. 删除后问题解决.
2.jQuery.get( url, [data], [callback], [type] )
Returns: XMLHttpRequest
说明:
通过远程 HTTP GET 请求载入信息。
这是一个简单的 GET 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。
讲解:
此函数发送Get请求, 参数可以直接在url中拼接, 比如:
$.get("../data/AjaxGetMethod.aspx?param=btnAjaxGet_click");
或者通过data参数传递:
$.get("../data/AjaxGetMethod.aspx", { "param": "btnAjaxGet2_click" });
两种方式效果相同, data参数会自动添加到请求的url中
如果url中的某个参数, 又通过data参数传递, 不会自动合并相同名称的参数.
回调函数的签名如下:
function (data, textStatus) { // data could be xmlDoc, jsonObj, html, text, etc... this; // the options for this ajax request }
其中data是返回的数据, testStatus表示状态码, 可能是如下值:
"timeout","error","notmodified","success","parsererror"
在回调函数中的this是获取options对象的引用.有关options的各种说明, 请参见:
http://docs.jquery.com/Ajax/jQuery.ajax#options
type参数是指data数据的类型, 可能是下面的值:
"xml", "html", "script", "json", "jsonp", "text".
默认为"html".
jQuery.getJSON( url, [data], [callback] ) 方法就相当于 jQuery.get(url, [data],[callback], "json")
3. jQuery.getJSON( url, [data], [callback] )
Returns: XMLHttpRequest
相当于: jQuery.get(url, [data],[callback], "json")
说明:
通过 HTTP GET 请求载入 JSON 数据。
在 jQuery 1.2 中,您可以通过使用JSONP 形式的回调函数来加载其他网域的JSON数据,如 "myurl?callback=?"。jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。
注意:此行以后的代码将在这个回调函数执行前执行。
讲解:
getJSON函数仅仅将get函数的type参数设置为"JSON"而已. 在回调函数中获取的数据已经是按照JSON格式解析后的对象了:
$.getJSON("../data/AjaxGetCityInfo.aspx", { "resultType": "json" }, function(data, textStatus) { alert(data.length); alert(data[0].CityName); });
服务器端返回的字符串如下:
[{""pkid"":""0997"",""ProvinceId"":""XJ"",""CityName"":""阿克苏"",""CityNameEn"":""Akesu"",""PostCode"":""843000"",""isHotCity"":false}, {""pkid"":""0412"",""ProvinceId"":""LN"",""CityName"":""鞍山"",""CityNameEn"":""Anshan"",""PostCode"":""114000"",""isHotCity"":false}]
示例中我返回的饿是一个数组, 使用data.length可以获取数组的元素个数, data[0]访问第一个元素, data[0].CityName访问第一个元素的CityName属性.
4.jQuery.getScript( url, [callback] )
Returns: XMLHttpRequest
相当于: jQuery.get(url, null, [callback], "script")
说明:
通过 HTTP GET 请求载入并执行一个 JavaScript 文件。
jQuery 1.2 版本之前,getScript 只能调用同域 JS 文件。 1.2中,您可以跨域调用 JavaScript 文件。注意:Safari 2 或更早的版本不能在全局作用域中同步执行脚本。如果通过 getScript 加入脚本,请加入延时函数。
讲解:
以前我使用dojo类库时官方默认的文件不支持跨域最后导致我放弃使用dojo(虽然在网上找到了可以跨域的版本, 但是感觉不够完美). 所以我特别对这个函数的核心实现和使用做了研究.
首先了解此函数的jQuery内部实现, 仍然使用get函数, jQuery所有的Ajax函数包括get最后都是用的是jQuery.ajax(), getScript将传入值为"script"的type参数, 最后在Ajax函数中对type为script的请求做了如下处理:
var head = document.getElementsByTagName("head")[0]; var script = document.createElement("script"); script.src = s.url;
上面的代码动态建立了一个script语句块, 并且将其加入到head中:
head.appendChild(script);
当脚本加载完毕后, 再从head中删除:
01.
// Handle Script loading
02.
if
( !jsonp ) {
03.
var
done =
false
;
04.
05.
// Attach handlers for all browsers
06.
script.onload = script.onreadystatechange =
function
(){
07.
if
( !done && (!
this
.readyState ||
08.
this
.readyState ==
"loaded"
||
this
.readyState ==
"complete"
) ) {
09.
done =
true
;
10.
success();
11.
complete();
12.
13.
// Handle memory leak in IE
14.
script.onload = script.onreadystatechange =
null
;
15.
head.removeChild( script );
16.
}
17.
};
18.
}
我主要测试了此函数的跨域访问和多浏览器支持.下面是结果:
IE6 | FireFox | 注意事项 | |
非跨域引用js | 通过 | 通过 | 回调函数中的data和textStatus均可用 |
跨域引用js | 通过 | 通过 | 回调函数中的data和textStatus均为undifined |
下面是我关键的测试语句, 也用来演示如何使用getScript函数:
01.
$(
"#btnAjaxGetScript"
).click(
function
(event)
02.
{
03.
$.getScript(
"../scripts/getScript.js"
,
function
(data, textStatus)
04.
{
05.
alert(data);
06.
alert(textStatus);
07.
alert(
this
.url);
08.
});
09.
});
10.
11.
$(
"#btnAjaxGetScriptCross"
).click(
function
(event)
12.
{
13.
$.getScript(
"http://resource.elong.com/getScript.js"
,
function
(data, textStatus)
14.
{
15.
alert(data);
16.
alert(textStatus);
17.
alert(
this
.url);
18.
});
19.
});
5. jQuery.post( url, [data], [callback], [type] )
Returns: XMLHttpRequest
说明:
通过远程 HTTP POST 请求载入信息。
这是一个简单的 POST 请求功能以取代复杂 $.ajax 。请求成功时可调用回调函数。如果需要在出错时执行函数,请使用 $.ajax。
讲解:
具体用法和get相同, 只是提交方式由"GET"改为"POST".
6. jQuery.ajax( options )
Returns: XMLHttpRequest
说明:
通过 HTTP 请求加载远程数据。
jQuery 底层 AJAX 实现。简单易用的高层实现见 $.get, $.post 等。
$.ajax() 返回其创建的 XMLHttpRequest 对象。大多数情况下你无需直接操作该对象,但特殊情况下可用于手动终止请求。
$.ajax() 只有一个参数:参数 key/value 对象,包含各配置及回调函数信息。详细参数选项见下。
注意: 如果你指定了 dataType 选项,请确保服务器返回正确的 MIME 信息,(如 xml 返回 "text/xml")。错误的 MIME 类型可能导致不可预知的错误。见Specifying the Data Type for AJAX Requests 。
注意:如果dataType设置为"script",那么所有的远程(不在同一域名下)的POST请求都将转化为GET请求。(因为将使用DOM的script标签来加载)
jQuery 1.2 中,您可以跨域加载 JSON 数据,使用时需将数据类型设置为 JSONP。使用 JSONP 形式调用函数时,如 "myurl?callback=?" jQuery 将自动替换 ? 为正确的函数名,以执行回调函数。数据类型设置为 "jsonp" 时,jQuery 将自动调用回调函数。
讲解:
这是jQuery中Ajax的核心函数, 上面所有的发送Ajax请求的函数内部最后都会调用此函数.options参数支持很多参数, 使用这些参数可以完全控制ajax请求. 在Ajax回调函数中的this对象也是options对象.
因为平时使用最多的还是简化了的get和post函数, 所以在此不对options参数做详细讲解了. options参数文档请见:
http://docs.jquery.com/Ajax/jQuery.ajax#options
五.Ajax相关函数.
jQuery提供了一些相关函数能够辅助Ajax函数.
1. jQuery.ajaxSetup( options )
无返回值
说明:
设置全局 AJAX 默认options选项。
讲解:
有时我们的希望设置页面上所有Ajax属性的默认行为.那么就可以使用此函数设置options选项, 此后所有的Ajax请求的默认options将被更改.
options是一个对象, 可以设置的属性请此连接:http://docs.jquery.com/Ajax/jQuery.ajax#toptions
比如在页面加载时, 我使用下面的代码设置Ajax的默认option选项:
1.
$.ajaxSetup({
2.
url: "../data/AjaxGetMethod.aspx",
3.
data: { "param": "ziqiu.zhang" },
4.
global: false,
5.
type: "POST",
6.
success: function(data, textStatus) { $("#divResult").html(data); }
7.
});
上面的代码设置了一个Ajax请求需要的基本数据: 请求url, 参数, 请求类型, 成功后的回调函数.
此后我们可以使用无参数的get(), post()或者ajax()方法发送ajax请求.完整的示例代码如下:
01.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
02.
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
03.
<
head
>
04.
<
title
>jQuery Ajax - Load</
title
>
05.
06.
<
script
type
=
"text/javascript"
src
=
"../scripts/jquery-1.3.2-vsdoc2.js"
></
script
>
07.
08.
<
script
type
=
"text/javascript"
>
09.
$(document).ready(function()
10.
{
11.
$.ajaxSetup({
12.
url: "../data/AjaxGetMethod.aspx",
13.
data: { "param": "ziqiu.zhang" },
14.
global: false,
15.
type: "POST",
16.
success: function(data, textStatus) { $("#divResult").html(data); }
17.
});
18.
19.
$("#btnAjax").click(function(event) { $.ajax(); });
20.
$("#btnGet").click(function(event) { $.get(); });
21.
$("#btnPost").click(function(event) { $.post(); });
22.
$("#btnGet2").click(function(event) { $.get("../data/AjaxGetMethod.aspx",{ "param": "other" }); });
23.
24.
});
25.
26.
</
script
>
27.
28.
</
head
>
29.
<
body
>
30.
<
button
id
=
"btnAjax"
>不传递参数调用ajax()方法</
button
><
br
/>
31.
<
button
id
=
"btnGet"
>不传递参数调用get()方法</
button
><
br
/>
32.
<
button
id
=
"btnPost"
>不传递参数调用post()方法</
button
><
br
/>
33.
<
button
id
=
"btnGet2"
>传递参数调用get()方法, 使用全局的默认回调函数</
button
><
br
/>
34.
<
br
/>
35.
<
div
id
=
"divResult"
></
div
>
36.
</
body
>
37.
</
html
>
注意当使用get()或者post()方法时, 除了type参数将被重写为"GET"或者"POST"外, 其他参数只要不传递都是使用默认的全局option. 如果传递了某一个选项, 比如最后一个按钮传递了url和参数, 则本次调用会以传递的选项为准. 没有传递的选项比如回调函数还是会使用全局option设置值.
2.serialize( )
Returns: String
说明:
序列表表格内容为字符串,用于 Ajax 请求。
序列化最常用在将表单数据发送到服务器端时. 被序列化后的数据是标准格式, 可以被几乎所有的而服务器端支持.
为了尽可能正常工作, 要求被序列化的表单字段都有name属性, 只有一个eid是无法工作的.
像这样写name属性:
<input id="email" name="email" type="text" />
讲解:
serialize()函数将要发送给服务器的form中的表单对象拼接成一个字符串. 便于我们使用Ajax发送时获取表单数据. 这和一个From按照Get方式提交时, 自动将表单对象的名/值放到url上提交差不多.
比如这样一个表单:
生成的字符串为:single=Single¶m=Multiple¶m=Multiple3&check=check2&radio=radio1
提示:代码见 chapter6\7-serialize.htm
3.serializeArray( )
说明:
序列化表格元素 (类似 '.serialize()' 方法) 返回 JSON 数据结构数据。
注意,此方法返回的是JSON对象而非JSON字符串。需要使用插件或者第三方库进行字符串化操作。
讲解:
看说明文档让我有所失望, 使用此函数获取到的是JSON对象, 但是jQuery中没有提供将JSON对象转化为JSON字符串的方法.
在JSON官网上没有找到合适的JSON编译器, 最后选用了jquery.json这个jQuery插件:
http://code.google.com/p/jquery-json/
使用起来异常简单:
var thing = {plugin: 'jquery-json', version: 1.3}; var encoded = $.toJSON(thing); //'{"plugin": "jquery-json", "version": 1.3}' var name = $.evalJSON(encoded).plugin; //"jquery-json" var version = $.evalJSON(encoded).version; // 1.3
使用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"}]
六.全局Ajax事件
在jQuery.ajaxSetup( options ) 中的options参数属性中, 有一个global属性:
global
类型:布尔值
默认值: true
说明:是否触发全局的Ajax事件.
这个属性用来设置是否触发全局的Ajax事件. 全局Ajax事件是一系列伴随Ajax请求发生的事件.主要有如下事件:
名称 | 说明 |
ajaxComplete( callback ) | AJAX 请求完成时执行函数 |
ajaxError( callback ) | AJAX 请求发生错误时执行函数 |
ajaxSend( callback ) | AJAX 请求发送前执行函数 |
ajaxStart( callback ) | AJAX 请求开始时执行函数 |
ajaxStop( callback ) | AJAX 请求结束时执行函数 |
ajaxSuccess( callback ) | AJAX 请求成功时执行函数 |
用一个示例讲解各个事件的触发顺序:
01.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
02.
<
html
xmlns
=
"http://www.w3.org/1999/xhtml"
>
03.
<
head
>
04.
<
title
>jQuery Ajax - AjaxEvent</
title
>
05.
06.
<
script
type
=
"text/javascript"
src
=
"../scripts/jquery-1.3.2.min.js"
></
script
>
07.
08.
<
script
type
=
"text/javascript"
>
09.
$(document).ready(function()
10.
{
11.
12.
$("#btnAjax").bind("click", function(event)
13.
{
14.
$.get("../data/AjaxGetMethod.aspx");
15.
})
16.
17.
$("#divResult").ajaxComplete(function(evt, request, settings) { $(this).append('<
div
>ajaxComplete</
div
>'); })
18.
$("#divResult").ajaxError(function(evt, request, settings) { $(this).append('<
div
>ajaxError</
div
>'); })
19.
$("#divResult").ajaxSend(function(evt, request, settings) { $(this).append('<
div
>ajaxSend</
div
>'); })
20.
$("#divResult").ajaxStart(function() { $(this).append('<
div
>ajaxStart</
div
>'); })
21.
$("#divResult").ajaxStop(function() { $(this).append('<
div
>ajaxStop</
div
>'); })
22.
$("#divResult").ajaxSuccess(function(evt, request, settings) { $(this).append('<
div
>ajaxSuccess</
div
>'); })
23.
24.
});
25.
26.
</
script
>
27.
28.
</
head
>
29.
<
body
>
30.
<
br
/><
button
id
=
"btnAjax"
>发送Ajax请求</
button
><
br
/>
31.
<
div
id
=
"divResult"
></
div
>
32.
</
body
>
33.
</
html
>
结果如图:
我们可以通过将默认options的global属性设置为false来取消全局Ajax事件的触发.
七.注意事项
如果在Get请求发送的url中有两个同名参数, 比如两个param参数:
http://localhost/AjaxGetMethod.aspx?param=Multiple¶m=Multiple3
使用服务器端方法获取param参数:
if (!String.IsNullOrEmpty(HttpContext.Current.Request["Param"])) { param = HttpContext.Current.Request["Param"]; }
此时获取到得param是一个用","分隔多个值的字符串:
Multiple,Multiple3
八.总结
本文介绍如何使用jquery实现Ajax功能. 用于发送Ajax请求的相关函数如load, get, getJSON和post这些渐变Ajax方法, 对于核心的ajax 方法没有过多介绍, 主要是通过配置复杂的参数实现完全控制Ajax请求. 另外讲解了ajax的辅助函数比如用于序列化表单对象为字符串的serialize()方法, 用于将表单对象序列化为JSON对象的serializeArray()方法. 这些在使用脚本获取数据实现与服务器端交互是很有用, JSON格式的数据在处理大对象编程时将我们从混乱的属性字符串中解放出来.
jQuery还提供录入全局ajax事件这一个特殊的事件, 并且可以在一个对象上设置这些事件, 在发送Ajax请求的各个生命周期上会调用这些事件, 可以通过修改默认的options对象的global属性打开或关闭全局事件.
目前本系列文章在加紧创作阶段. 所以代码和文章示例都没有来得及重新整理. 下面是本章的代码下载, 但是含有所有以前未整理的示例,请大家下载后看chapter6文件夹, 里面是本章的所有示例:
相关推荐
从零开始学习jQuery (一) ...从零开始学习jQuery (六) AJAX快餐 59 一.摘要 59 二.前言 59 三.原始Ajax与jQuery中的Ajax 59 四.jQuery Ajax详解 63 五.Ajax相关函数. 70 六.全局Ajax事件 74 七.注意事项 76 八.总结 76
《从零开始学习jQuery (六) AJAX快餐》深入讲解jQuery的Ajax功能,`.load()`、`.get()`和`.post()`等方法让数据交换变得简单易行,实现页面的无刷新更新。 九、jQueryUI常用功能实战 在《从零开始学习jQuery (十) ...
本系列教程将通过从零开始的学习路径,深入浅出地探讨jQuery的核心概念和技术。 1. **开天辟地入门篇**: jQuery的初识始于它的核心概念,包括如何引入jQuery库,以及使用 `$` 符号作为入口开始编写jQuery代码。这...
少儿编程scratch项目源代码文件案例素材-孤胆枪手.zip
少儿编程scratch项目源代码文件案例素材-航班.zip
内容概要:本文介绍了Matlab环境下的人脸识别源码合集,涵盖PCA、Adaboost、DLDA等多种经典算法的具体实现。文中不仅提供了详细的代码解释,如PCA算法中的特征脸生成、Adaboost算法中的弱分类器组合,还包括了一些实用技巧,如灰度转换、协方差矩阵计算的提速方法、积分图优化等。此外,还提及了其他语言(如Java、Python、C#、OpenCV)的人脸识别源码作为参考。 适合人群:对人脸识别技术感兴趣的初学者和有一定编程基础的研究人员。 使用场景及目标:① 学习和掌握PCA、Adaboost等人脸识别的经典算法;② 实现并优化人脸识别系统;③ 探讨不同光照条件下的算法表现。 其他说明:文中提到的源码资源丰富,尤其是带有‘推荐’标识的Matlab项目,非常适合初学者入门。同时,还提供了一些实用的调试工具和性能优化建议,如实时摄像头检测、CUDA加速等。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细介绍了RK3568和RK356X系列处理器的开发资料,包括硬件原理图、PCB设计以及SDK开发。硬件部分提供了两种版本的PCB设计文件(Allegro和PADS),并附有详细的GPIO控制示例代码。软件部分则涵盖了Buildroot和Yocto双环境支持,以及多媒体开发示例,如视频播放功能。此外,还提供了丰富的库文件和开发示例,帮助开发者快速上手。文中还提到了一些常见的调试技巧和注意事项,如DDR初始化、电源配置等。 适合人群:嵌入式系统开发工程师、硬件设计师、软件开发者,尤其是那些希望深入理解和应用RK3568/356X平台的人群。 使用场景及目标:①硬件设计:通过原理图和PCB设计文件,帮助工程师快速构建硬件原型;②软件开发:借助SDK和示例代码,加速应用程序的开发和测试;③调试与优化:提供常见问题的解决方案和调试技巧,提高系统的稳定性和性能。 其他说明:资料总量达34GB,内容详尽全面,适用于从初学者到资深工程师的不同层次用户。建议新手先从外设驱动入手,逐步深入硬件设计和高级功能开发。
python打卡DAY8
内容概要:本文详细介绍了如何利用Simulink搭建冷热电三联供系统(CCHP)的仿真模型。首先,文章展示了燃气轮机、余热锅炉和吸收式制冷机这三个主要模块的具体建模方法,包括关键参数的选择和非线性特性的处理。其次,针对每个模块提出了常见的仿真陷阱及其解决方案,如燃气轮机的流量和功率限幅、余热锅炉的换热效率曲线以及制冷系统的PID控制优化。此外,还讨论了储能控制策略、多能流耦合仿真、故障树分析等高级话题,并提供了实用的数据可视化技巧。最后,强调了仿真结果验证的重要性,给出了与实际电厂数据进行对比的方法。 适合人群:从事综合能源系统研究的技术人员、高校相关专业师生、对Simulink仿真感兴趣的工程师。 使用场景及目标:帮助读者掌握CCHP系统仿真的完整流程,提高仿真精度,避免常见错误,优化系统性能,最终实现更高效的能源管理和应用。 其他说明:文中不仅包含了详细的理论推导和技术细节,还有许多来自实际项目的宝贵经验和教训,对于理解和实施复杂的能源系统仿真非常有价值。
少儿编程scratch项目源代码文件案例素材-攻击潜艇(改编版).zip
内容概要:本文详细介绍了双向全桥CLLC拓扑的双闭环控制系统设计及其MATLAB/Simulink仿真。首先解析了CLLC拓扑结构,重点讨论了谐振腔参数(Lr、Cr、Lm)的选择和计算方法。接着阐述了双闭环控制策略,即电压外环确保稳态精度,电流内环应对动态扰动,并提供了具体的PI控制器实现代码。文中还强调了磁性元件选型的重要性,特别是变压器设计中的注意事项。最后,通过仿真验证系统的动态响应性能,展示了负载突增时的恢复时间和软开关效果。同时,作者分享了许多实用的调试技巧和避坑经验。 适合人群:从事电力电子设计的技术人员,尤其是对双向DC-DC变换器感兴趣的工程师。 使用场景及目标:适用于需要高效双向能量传输的应用场合,如储能系统、电动汽车充电设备等。目标是帮助读者掌握CLLC拓扑的设计原理和控制方法,提高系统效率和稳定性。 其他说明:文章不仅提供了详细的理论推导和公式计算,还附带了完整的MATLAB/Simulink仿真文件,便于读者进行实践操作。此外,作者针对常见问题给出了具体的解决方案,使读者能够更快地理解和应用相关技术。
内容概要:本文详细介绍了晶闸管控制串联电容器(TCSC)的工作原理、控制策略以及实际应用。首先解释了TCSC的基本概念,即通过控制晶闸管的触发角来动态调节输电线路的等效阻抗,从而优化电力系统的性能。文中提供了多个Python和Matlab代码示例,展示了如何计算触发角、实现模糊控制和PID控制等关键技术。此外,文章还讨论了TCSC在抑制低频振荡、提高输电能力和解决次同步振荡等问题上的重要作用,并分享了一些现场调试的经验教训,如谐波滤波器的设计和故障穿越能力的验证。 适合人群:从事电力系统研究、设计和维护的技术人员,尤其是对柔性交流输电系统(FACTS)感兴趣的工程师。 使用场景及目标:适用于希望深入了解TCSC工作原理和技术实现的研究人员和工程师。主要目标是掌握TCSC的控制逻辑、调试技巧以及与其他电力设备的协同工作方式。 其他说明:文章不仅涵盖了理论知识,还包括了许多实际案例和代码示例,有助于读者更好地理解和应用TCSC技术。
内容概要:本文详细介绍了如何利用51单片机构建一个智能温控电扇系统。系统主要分为三个部分:温度采集、档位切换和PWM调速。温度采集采用DS18B20数字温度传感器,通过单总线协议进行通信,确保温度测量的准确性。档位切换逻辑根据温度范围将风扇分为四个档位(停止、低速、中速、高速),并通过PWM信号控制电机转速。文中还讨论了硬件滤波、延时设置以及一些常见的调试技巧,如使用示波器检查波形和处理电机启动时的复位问题。此外,文章提供了完整的代码片段,帮助读者理解和实现各个功能模块。 适合人群:对嵌入式系统有一定了解的电子爱好者、学生和工程师。 使用场景及目标:适用于希望深入了解51单片机应用、温度传感器接口、PWM调速技术和硬件电路设计的人群。目标是掌握智能温控系统的实现方法,能够独立搭建和调试类似项目。 其他说明:文中提到的一些具体实现细节和技术难点,如单总线协议的时序要求、PWM频率的选择和硬件滤波措施,对于提高系统的稳定性和性能至关重要。同时,文章还提供了一些实用的调试建议,有助于快速定位和解决问题。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 Rust 以内存安全、零成本抽象和并发高效的特性,重塑编程体验。无需垃圾回收,却能通过所有权与借用检查机制杜绝空指针、数据竞争等隐患。从底层系统开发到 Web 服务构建,从物联网设备到高性能区块链,它凭借出色的性能和可靠性,成为开发者的全能利器。拥抱 Rust,解锁高效、安全编程新境界!
内容概要:本文详细介绍了如何利用西门子S7-200 PLC的指针操作来高效地进行数据统计,包括求平均值、最大值和最小值。文章首先展示了核心代码及其详细的注释,解释了指针的初始化、循环结构、数值处理、极值比较以及指针移动的具体实现。文中还提供了针对不同类型数据(如浮点数)的修改建议,并强调了数据存储结构的配置。此外,作者分享了一些优化技巧,如首次循环初始化极值、防止数据溢出等。最后,文章讨论了将此逻辑封装成子程序的应用实例,如温度采集系统的数据处理。 适合人群:从事工业自动化控制领域的工程师和技术人员,尤其是对西门子S7-200 PLC有一定了解并希望提高数据处理效率的人群。 使用场景及目标:①用于需要频繁进行数据统计的工控项目,如温度、压力等传感器数据的处理;②通过指针操作减少计算偏移量的时间开销,提升数据处理速度;③提供一种通用的数据处理模板,便于快速部署和维护。 其他说明:文章不仅提供了具体的代码实现,还附带了许多实用的小技巧和注意事项,帮助读者更好地理解和应用这些技术。
文档支持目录章节跳转同时还支持阅读器左侧大纲显示和章节快速定位,文档内容完整、条理清晰。文档内所有文字、图表、函数、目录等元素均显示正常,无任何异常情况,敬请您放心查阅与使用。文档仅供学习参考,请勿用作商业用途。 编译闪电般迅速,并发性能卓越,部署轻松简单!Go 语言以极简设计理念和出色工程性能,成为云原生时代的首选编程语言。从 Docker 到 Kubernetes,全球顶尖科技企业都在采用 Go。点击了解 Go 语言的核心优势、实战窍门和未来走向,开启高效编程的全新体验!
内容概要:本文详细介绍了使用MATLAB及其Deep Learning Toolbox实现手写数字识别系统的全过程。首先利用内置的MNIST数据集进行数据准备,将数据分为训练集和测试集并进行预处理。接着构建了一个六层卷积神经网络模型,采用3x3小卷积核、批量归一化层以及池化层等关键技术,配合Adam优化器进行高效训练。训练过程中设置了合理的超参数如初始学习率为0.001,最大迭代次数为15次,并启用了训练进度可视化。完成训练后,通过分类准确率和混淆矩阵评估模型性能,通常能达到98%以上的准确率。此外,文中还提供了针对特定应用场景的数据增强方法、模型优化建议以及自定义识别的具体步骤。 适合人群:对机器学习尤其是深度学习感兴趣的初学者,熟悉MATLAB编程环境的研究人员和技术爱好者。 使用场景及目标:适用于希望快速入门卷积神经网络并在MATLAB平台上动手实践手写数字识别任务的学习者;目标是在掌握理论基础上能够独立完成从数据准备到模型训练再到结果评估的一系列流程。 其他说明:文中不仅给出了完整的代码实现,还包括了许多实用的小技巧,如内存管理、提高识别精度的方法等。同时强调了在实际应用中应注意的问题,例如避免过度拟合、正确处理输入图像等。
8款2.4G PCB板载天线 DWG格式