`
chaoyi
  • 浏览: 288586 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

第12章 Ajax

 
阅读更多

学习要点:
1.Ajax 概述
2.load()方法
3.$.get()和$.post()
4.$.getScript()和$.getJSON()
5.$.ajax()方法
6.表单序列化

Ajax 全称为:“Asynchronous JavaScript and XML”(异步 JavaScript 和 XML),它并不是 JavaScript 的一种单一技术,而是利用了一系列交互式网页应用相关的技术所形成的结合体。使用 Ajax,我们可以无刷新状态更新页面,并且实现异步提交,提升了用户体验。

一.Ajax 概述

Ajax 这个概念是由 Jesse James Garrett 在 2005 年发明的。 它本身不是单一技术, 是一串技术的集合,主要有:
1.JavaScript,通过用户或其他与浏览器相关事件捕获交互行为;
2.XMLHttpRequest 对象,通过这个对象可以在不中断其它浏览器任务的情况下向服务器发送请求;
3.服务器上的文件,以 XML、HTML 或 JSON 格式保存文本数据;
4.其它 JavaScript,解释来自服务器的数据(比如 PHP 从 MySQL 获取的数据)并将其呈现到页面上。

由于 Ajax 包含众多特性,优势与不足也非常明显。优势主要以下几点:
1.不需要插件支持(一般浏览器且默认开启 JavaScript 即可) ;
2.用户体验极佳(不刷新页面即可获取可更新的数据) ;
3.提升 Web 程序的性能(在传递数据方面做到按需放松,不必整体提交) ;
4.减轻服务器和带宽的负担(将服务器的一些操作转移到客户端) ;

而 Ajax 的不足由以下几点:
1.不同版本的浏览器度 XMLHttpRequest 对象支持度不足(比如 IE5 之前);
2.前进、后退的功能被破坏(因为 Ajax 永远在当前页,不会几率前后页面) ;
3.搜索引擎的支持度不够(因为搜索引擎爬虫还不能理解 JS 引起变化数据的内容) ;
4.开发调试工具缺乏(相对于其他语言的工具集来说,JS 或 Ajax 调试开发少的可怜) 。

异步和同步
使用 Ajax 最关键的地方,就是实现异步请求、接受响应及执行回调。那么异步与同步有什么区别呢?我们普通的 Web 程序开发基本都是同步的,意为执行一段程序才能执行下一段, 类似电话中的通话, 一个电话接完才能接听下个电话; 而异步可以同时执行多条任务,感觉有多条线路,类似于短信,不会因为看一条短信而停止接受另一条短信。Ajax 也可以使用同步模式执行, 但同步的模式属于阻塞模式, 这样会导致多条线路执行时又必须一条一条执行,会让 Web 页面出现假死状态,所以,一般 Ajax 大部分采用异步模式。

二.load()方法
jQuery 对 Ajax 做了大量的封装,我们使用起来也较为方便,不需要去考虑浏览器兼容性。对于封装的方式,jQuery 采用了三层封装:最底层的封装方法为:$.ajax(),而通过这层封装了第二层有三种方法:.load()、$.get()和$.post(),最高层是$.getScript()和$.getJSON()方法。
.load()方法可以参数三个参数: url(必须, 请求 html 文件的 url 地址, 参数类型为 String)、data(可选,发送的 key/value 数据,参数类型为 Object)、callback(可选,成功或失败的回调函数,参数类型为函数 Function)。
如果想让 Ajax 异步载入一段 HTML 内容,我们只需要一个 HTML 请求的 url 即可。

//HTML
<input type="button" value="异步获取数据" />
<div id="box"></div>

 

//jQuery
$('input').click(function () {
$('#box').load('test.html');
});


如果想对载入的 HTML 进行筛选,那么只要在 url 参数后面跟着一个选择器即可。

//带选择器的 url
$('input').click(function () {
$('#box').load('test.html .my');
});

 
如果是服务器文件,比如.php。一般不仅需要载入数据,还需要向服务器提交数据,那么我们就可以使用第二个可选参数 data。向服务器提交数据有两种方式:get 和 post。

//不传递 data,则默认 get 方式
$('input').click(function () {
$('#box').load('test.php?url=ycku');
});

 

//get 方式接受的 PHP
<?php
if ($_GET['url'] == 'ycku') {
echo '瓢城 Web 俱乐部官网';
} else {
echo '其他网站';
}
?>

 

//传递 data,则为 post 方式
$('input').click(function () {
$('#box').load('test.php', {
url : 'ycku'
});
});

 

//post 方式接受的 PHP
<?php
if ($_POST['url'] == 'ycku') {
echo '瓢城 Web 俱乐部官网';
} else {
echo '其他网站';
}
?>

 
在 Ajax 数据载入完毕之后,就能执行回调函数 callback,也就是第三个参数。回调函数也可以传递三个可选参数: responseText (请求返回) 、 textStatus (请求状态)、 XMLHttpRequest(XMLHttpRequest 对象) 。

$('input').click(function () {
$('#box').load('test.php', {
url : 'ycku'
}, function (response, status, xhr) {
alert('返回的值为:' + response + ',状态为:' + status + ',
状态是:' + xhr.statusText);
});
});

 
注意: status 得到的值, 如果成功返回数据则为: success, 否则为: error。 XMLHttpRequest对象属于 JavaScript 范畴,可以调用一些属性如下:


 
如果成功返回数据, 那么 xhr 对象的 statusText 属性则返回'OK'字符串。 除了'OK'的状态字符串,statusText 属性还提供了一系列其他的值,如下:


 
三.$.get()和$.post()
.load()方法是局部方法,因为他需要一个包含元素的 jQuery 对象作为前缀。而$.get()和$.post()是全局方法, 无须指定某个元素。 对于用途而言, .load()适合做静态文件的异步获取,而对于需要传递参数到服务器页面的,$.get()和$.post()更加合适。
$.get()方法有四个参数,前面三个参数和.load()一样,多了一个第四参数 type,即服务器返回的内容格式:包括 xml、html、script、json、jsonp 和 text。第一个参数为必选参数,后面三个为可选参数。

//使用$.get()异步返回 html 类型
$('input').click(function () {
$.get('test.php', {
url : 'ycku'
}, function (response, status, xhr) {
if (status == 'success') {
$('#box').html(response);
}
}) //type 自动转为 html
});

 

注意:第四参数 type 是指定异步返回的类型。一般情况下 type 参数是智能判断,并不需要我们主动设置,如果主动设置,则会强行按照指定类型格式返回。

//使用$.get()异步返回 xml
$('input').click(function () {
$.get('test.xml', function (response, status, xhr) {
$('#box').html($(response).find('root').find('url').text());
}); //type 自动转为 xml
});

 
注意:如果载入的是 xml 文件,type 会智能判断。如果强行设置 html 类型返回,则会把 xml 文件当成普通数据全部返回,而不会按照 xml 格式解析数据。

//使用$.get()异步返回 json
$.get('test.json', function (response, status, xhr) {
alert(response[0].url);
});

 
$.post()方法的使用和$.get()基本上一致,他们之间的区别也比较隐晦,基本都是背后的
不同,在用户使用上体现不出。具体区别如下:
1.GET 请求是通过 URL 提交的,而 POST 请求则是 HTTP 消息实体提交的;
2.GET 提交有大小限制(2KB) ,而 POST 方式不受限制;
3.GET 方式会被缓存下来,可能有安全性问题,而 POST 没有这个问题;
4.GET 方式通过$_GET[]获取,POST 方式通过$_POST[]获取。

//使用$.post()异步返回 html
$.post('test.php', {
url : 'ycku'
}, function (response, status, xhr) {
$('#box').html(response);
});

 
四.$.getScript()和$.getJSON()
jQuery 提供了一组用于特定异步加载的方法:$.getScript(),用于加载特定的 JS 文件;$.getJSON(),用于专门加载 JSON 文件。
有时我们希望能够特定的情况再加载 JS 文件,而不是一开始把所有 JS 文件都加载了,这时课时使用$.getScript()方法。

//点击按钮后再加载 JS 文件
$('input').click(function () {
$.getScript('test.js');
});

 
$.getJSON()方法是专门用于加载 JSON 文件的,使用方法和之前的类似。

$('input').click(function () {
$.getJSON('test.json', function (response, status, xhr) {
alert(response[0].url);
});
});

 
五.$.ajax()
$.ajax()是所有 ajax 方法中最底层的方法,所有其他方法都是基于$.ajax()方法的封装。
这个方法只有一个参数,传递一个各个功能键值对的对象。





 

//$.ajax 使用
$('input').click(function () {
$.ajax({
type : 'POST', //这里可以换成 GET
url : 'test.php',
data : {
url : 'ycku'
},
success : function (response, stutas, xhr) {
$('#box').html(response);
}
});
});

 
注意:对于 data 属性,如果是 GET 模式,可以使用三种之前说所的三种形式。如果是POST 模式可以使用之前的两种形式。

六.表单序列化
Ajax 用的最多的地方莫过于表单操作,而传统的表单操作是通过 submit 提交将数据传输到服务器端。如果使用 Ajax 异步处理的话,我们需要将每个表单元素逐个获取才方能提交。这样工作效率就大大降低。

//常规形式的表单提交
$('form input[type=button]').click(function () {
$.ajax({
type : 'POST',
url : 'test.php',
data : {
user : $('form input[name=user]').val(),
email : $('form input[name=email]').val()
},
success : function (response, status, xhr) {
alert(response);
}
});
});

 
使用表单序列化方法.serialize(),会智能的获取指定表单内的所有元素。这样,在面对大量表单元素时,会把表单元素内容序列化为字符串,然后再使用 Ajax 请求。

//使用.serialize()序列化表单内容
$('form input[type=button]').click(function () {
$.ajax({
type : 'POST',
url : 'test.php',
data : $('form').serialize(),
success : function (response, status, xhr) {
alert(response);
}
});
});

 
.serialize()方法不但可以序列化表单内的元素,还可以直接获取单选框、复选框和下拉列表框等内容。

//使用序列化得到选中的元素内容
$(':radio').click(function () {
$('#box').html(decodeURIComponent($(this).serialize()));
});

 
除了.serialize()方法,还有一个可以返回 JSON 数据的方法:.serializeArray()。这个方法可以直接把数据整合成键值对的 JSON 对象。

$(':radio').click(function () {
console.log($(this).serializeArray());
var json = $(this).serializeArray();
$('#box').html(json[0].value);
});

 
有时,我们可能会在同一个程序中多次调用$.ajax()方法。而它们很多参数都相同,这个时候我们课时使用 jQuery 提供的$.ajaxSetup()请求默认值来初始化参数。

$('form input[type=button]').click(function () {
$.ajaxSetup({
type : 'POST',
url : 'test.php',
data : $('form').serialize()
});
$.ajax({
success : function (response, status, xhr) {
alert(response);
}
});
});

 
在使用 data 属性传递的时候,如果是以对象形式传递键值对,可以使用$.param()方法将对象转换为字符串键值对格式。

var obj = {a : 1, b : 2, c : 3};
var form = $.param(obj);
alert(form);

 
注意:使用$.param()将对象形式的键值对转为 URL 地址的字符串键值对,可以更加稳定准确的传递表单内容。因为有时程序对于复杂的序列化解析能力有限,所以直接传递 obj对象要谨慎。

  • 大小: 18.9 KB
  • 大小: 25.7 KB
  • 大小: 10.8 KB
  • 大小: 55.8 KB
  • 大小: 39.6 KB
分享到:
评论

相关推荐

    MATLAB算法插值与拟合代码

    MATLAB算法插值与拟合代码提取方式是百度网盘分享地址

    基于二级计算机系统建立无取向硅钢轧制模型的研究

    随着计算机的发展及轧制自动化程度的提高,计算机控制系统在带钢热连轧生产线 中发挥着越来越重要的作用。硅钢作为钢中的艺术品,对轧制精度要求极高,传统的计 算机控制系统轧制模型并不能适应硅钢高精度轧制的生产要求,因此,开发设计精确的 轧制模型显得尤为重要。 本文以包钢CSP热连轧计算机控制系统为研究对象,针对原有轧制模型生产硅钢无 法达到成品厚度要求精度的问题,以新品种硅钢50SW800为研究对象,开发了适应性 较好的厚度精度控制轧制力模型与轧制力自学习模型,实际运行良好。主要工作及结论 如下: 通过分析大量硅钢轧制的重要工艺参数的变化规律,剔除温度、张力、摩擦力等影 响参数,主要针对带钢的变形抗力进行研究,采用微单元的塑性变形方程式,进行硅钢 变形抗力参数的计算,并利用在轧制时材料化学元素、变形率、温度、实际轧制压力、 理论轧制压力等数据通过多元线性回归得出新的轧制压力修正系数,最终成功构建了轧 制力模型,最终将该轧制力模型用于硅钢的轧制力设定预计算,首坯轧制偏差降低60%。

    uAI - AI Assistant 1.3.7人工智能助手Unity插件unitypackage项目源码C#

    uAI - AI Assistant 1.3.7人工智能助手Unity插件unitypackage项目源码C# 支持Unity版本2020.3.45或更高 uAI Assistant 是 Unity 的扩展,提供了一套强大的工具,由 OpenAI 最新的 GPT-4 Turbo 提供支持,具有 128k 上下文窗口、3.5 AI 模型以及 Dall-E 2 和 Dall-E 3。 uAI Assistant 中包含的 DemoScene 使用 Unity 包管理器中的 TextMeshPro 包作为 UI 文本。确保在导入此包之前导入它。 还要导入“TMP Essential Resources”,因为 DemoScene 使用“LiberationSans.ttf”字体。有关说明,请参阅文档。 uAI 助手? uAI Assistant 是 Unity 游戏引擎的强大扩展,它使用 GPT AI 帮助游戏开发人员轻松创建专业代码和引人入胜的游戏内容。 您需要 OpenAI 密钥才能使用 uAI Assistant!请阅读我们的文档以获取更多说明。 让你的纹理变得无缝 使用 AI 创建

    2024年全球液化天然气船用发电机组行业总体规模、主要企业国内外市场占有率及排名.docx

    2024年全球液化天然气船用发电机组行业总体规模、主要企业国内外市场占有率及排名

    AX3_model_extras-1.5.3-py3-none-any.whl.zip

    AX3_model_extras-1.5.3-py3-none-any.whl.zip

    人工智能+​NLP(Natural Language Processing)技术+技术原理图

    人工智能+​NLP(Natural Language Processing)技术+技术原理图 自然语言处理(NLP)是人工智能(AI)最热门的领域之一,这要归功于一些应用程序,如撰写连贯文章的文本生成器、欺骗人们认为自己有感知能力的聊天机器人,以及生成任何你能描述的真实图像的文本到图像程序。近年来,计算机理解人类语言、编程语言,甚至类似于语言的生物和化学序列,如DNA和蛋白质结构的能力发生了革命性的变化。最新的人工智能模型正在解锁这些领域,以分析输入文本的含义,并生成有意义、有表达力的输出。

    BCS-Service

    .Net core 6

    AVMSpeechMath-0.0.4-py3-none-any.whl.zip

    AVMSpeechMath-0.0.4-py3-none-any.whl.zip

    小学Scratch游戏化教学的实践研究-以泰州市Y小学为例

    随着智能教育时代的到来,计算机教育击彴祀勺中小学生必不可少的课程。我国陆续出台的文件,均指向鼓励在基础教育阶段开展编程课程。Scratch软件作为一种新型编程工具,以其简单易学、趣味性强等特点深受广大青少年丿谨i喜爱。但在日常教学中发现,传统讲授式教学方式不能长期维待学生学习兴趣,妇比以往学习效果大打折扣。2022年出版的《义务 教育信息科技课程标准》中明确指出,要求教育工作者创新教学方式,创设真实情境以提高 学生学习参与度。游戏化教学这种创新型教学方式, 在与各学科良好的结合效果下,也逐渐进入信息教育者的视野。因此本研究旨在将游戏化元素融入Scratch课堂,探究 Scratch游戏化教学设计一般流程在行动中不断峦进, 以期得到有效实施的策略和建议。 通过三轮行动研究,验证了小学Scratch游戏化教学的一般流程。同时总结出游戏化教学 应用策略,包括在游戏化教学设计时需要合理制定游戏规则,以控制课堂纪律和给予学生适当激励;明确小组分工,学生各司其职,在组内合作和组间竞争中培养学生合作精神;采用多元化评价方式,综合运用纸笔测试和个性创作等方法自评与他评相结合的方式,增强学 生自主学习能

    VB+access智能排课系统(源代码+可执行程序+4万字LW+答辩PPT)

    VB+Access智能排课系统是一个综合性的软件开发项目,旨在利用Visual Basic(VB)和Access数据库技术,为教育机构提供一个高效、智能的排课管理工具。 该系统通过深入分析教育机构的排课需求,设计了合理的数据库结构,包括教师信息、学生信息、课程安排等关键数据表。基于这些数据结构,系统实现了自动排课、手动调整、课程查询等功能,满足了教育机构对于排课工作的多样化需求。 在开发过程中,我们注重用户体验,设计了简洁明了的界面和流畅的操作流程。用户可以通过系统快速录入课程信息、教师资源和学生名单,系统则能够自动根据预设规则进行排课,大大减轻了人工排课的负担。同时,系统还提供了手动调整功能,方便用户对自动排课结果进行微调和优化。 此外,我们还为该系统撰写了详尽的4万字论文,深入探讨了智能排课系统的设计理念、实现方法以及在教育领域的应用前景。同时,为了方便答辩,我们还制作了答辩PPT,清晰展示了系统的功能特点、技术实现和应用效果。

    2024-2030全球及中国液化天然气船用发电机组行业研究及十五五规划分析报告.docx

    2024-2030全球及中国液化天然气船用发电机组行业研究及十五五规划分析报告

    Python安装文件(MAC苹果系统)

    0.Python安装教程-Mac、pycharm-community-2022.2.1、python-3.10.7-macos11

    Acquisition-4.11-cp37-cp37m-manylinux_2_17_aarch64.whl.zip

    Acquisition-4.11-cp37-cp37m-manylinux_2_17_aarch64.whl.zip

    算法参考资料温度控制的PID程序

    算法参考资料温度控制的PID程序提取方式是百度网盘分享地址

    AccessControl-6.0-cp311-cp311-manylinux_2_5_i686.whl.zip

    AccessControl-6.0-cp311-cp311-manylinux_2_5_i686.whl.zip

    Acquisition-4.11-cp39-cp39-manylinux_2_5_i686.whl.zip

    Acquisition-4.11-cp39-cp39-manylinux_2_5_i686.whl.zip

    AccessControl-5.3-cp36-cp36m-manylinux_2_5_i686.whl.zip

    AccessControl-5.3-cp36-cp36m-manylinux_2_5_i686.whl.zip

    AccessControl-5.5-cp39-cp39-manylinux_2_17_aarch64.whl.zip

    AccessControl-5.5-cp39-cp39-manylinux_2_17_aarch64.whl.zip

    MATLAB算法GRNN的数据预测广义回归神经网络货运量预测

    MATLAB算法GRNN的数据预测-基于广义回归神经网络货运量预测提取方式是百度网盘分享地址

    人工智能发展和应用PPT

    人工智能发展和应用PPT,资源比较新

Global site tag (gtag.js) - Google Analytics