`
GODdaughter
  • 浏览: 104839 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

深入挖掘AJAX(来源:http://superbo8888.javaeye.com)

阅读更多

用面向对象的思维来写JS | 告诉你AJAX怎么玩
2007-05-23
深入挖掘AJAX
关键字: 深入挖掘AJAX

有一半清醒,有一半醉!这可能是众位看客看过之前两篇博客后的感觉.没关系,继续闷头看起!!!

你的脑壳一定要建立这样一种信念,ajax不是新的技术,而是对客户端技术js/dom/css的综合运用而已.所以掌握ajax,最重要是在锤炼你的js/dom/css功底.从web应用角度来看,无非就是处理两种事情

1.request-请求即浏览器向服务器请求数据

我们来看看在request方都需要做哪些事情呢?

1.1XMLHttpRequest对象的构建

ajax方式的请求是借助浏览器的一个对象XMLHttpRequest来实现.而获取 XMLHttpRequest对象在不同类型的浏览器中的方式不同,火狐浏览器直接通过new XMLHttpRequest()来完成,而对于IE浏览器来说,则需要根据IE的不同版本来实现XMLHttpRequest对象的构建.当获得 XMLHttpRequest对象后保存在一个变量中,命名成http_request.

1.2设置响应处理函数

在发送请求数据的时候,就需要提前设置谁来处理服务器返回的数据,对客户端来讲,当然就是某个js函数了.这里设置响应处理函数用这样一句代码来实现:

http_request.onreadystatechange=doHandler;

其中,onreadystatechange是XMLHttpRequest对象上的一个属性,整句代码的意思是"当服务器将数据返回后,将数据交给函数名为doHandler的函数负责处理".函数doHandler需要你单独编写.

1.3构建请求服务器地址和发送数据

服务器地址的构建是根据客户端的请求方式的不同而不同,如果客户端请求方式为post时,这时,地址和请求数据的构建是分离的.在前文的实例当中,我们是将数据发送到服务器端的一个叫做CheckAccountServlet来处理,那么请求地址和数据的构建如下:

var url = CheckAccountServlet;

var data = "name=zhangsan&password=123"

如果服务器端地址为/abc/cfg/CheckAccountServlet,那么这里就应该变成var url = abc/cfg/CheckAccountServlet,总之这里的地址是跟你所请求的服务器地址始终保持一致.

而对于请求方式为get时,这时,地址和请求数据一起来构建成一个完成的url.示例代码如下:

var url = "CheckAccountServlet?name=zhangsan&password=123"

在发送时,就将url直接以get方式发送到服务器上.

1.4连接服务器

就跟你操作db一样,在真正执行sql语句之前,你必须先跟db连接上.同样的,ajax要想发送数据则也需先跟服务器建立连接,建立连接代码如下

http_request.open(method,url,flag);

其中,method代表客户端请求方式,取值为post或者get

url代表服务器地址(具体构建方式见1.3)

flag取值为true或者false,如果为true表示只有和服务器建立连接成功后才执行发送数据,否则,相反(建议设置为true)

1.5.发送请求数据

如果请求方式为get,由于数据已经一并附加到url后面,所以,发送时直接调用http_request.send(null)即可.

如果请求方式为post,则需要将按照格式构建好的数据传递给send函数,并且在调用send函数前还需加上另外一个行代码,整个代码如下:

http_request.setRequestHeader("Content-Type","application/x-www-form-urlencoded");

http_request.send(data);


至此,客户端的处理已经宣告结束.剩下的就是服务器端的处理了

2.response-响应即服务器将响应数据发送回浏览器

我们再来看看在response方都需要做哪些事情呢?

2.1获取请求数据

跟你获取表单数据一样,获取ajax提交上来的数据也是采用request.getParameter()来实现

2.2处理请求数据

具体的数据处理就是你的事情了(做你想做的一切事情!)

2.3输出响应数据

要想把响应数据输出给客户端,只能通过输出流的方式来实现.

PrintWriter out = response.getWriter();//获取输出流

out.println("Some message");//开始输出响应数据

.......

out.close();//关闭输出流

这里,需要重点强调几点:

2.3.1.如果输出信息中包含中文,则需要在获取输出流之前添加response.setContentType("text/html;charset=gb2312");

2.3.2.设置让浏览器无缓存,添加response.setHeader("Cache-Control","no-cache");

2.3.3.输出信息只允许两种形式,分别是文本信息和xml格式的字符串信息.如果是文本信息,则按照前面的方式直接输出即可.如果是xml格式的字符串信息,则需要更改2.3.1.提到的代码response.setContentType ("text/html;charset=gb2312")为response.setContentType("text/xml;charset= gb2312")

至此,服务器端的响应信息已经输出完成(但我们的路还差最后一步哦,加点油,我们马上成功啦!!!)

2.4.客户端处理服务器返回的数据

那么,在哪来处理服务器返回的数据呢?还记得1.2提到的doHandler函数吗?

对了,doHandler函数就负责处理返回的数据的.来看看,它都做了哪些事情

/*具体负责处理服务器返回数据的函数*/
function doResponse(){
  //当服务器将数据返回给客户端时,readyState状态值为4

  if(http_request.readyState==4){
   //当服务器返回的数据是正常的数据时,status状态值为200
 
   if(http_request.status==200){
    //通过XMLHttpRequest对象的responseText属性获取
    //服务器返回的文本信息
       var returnMsg = http_request.responseText;
       //将响应信息显示到页面上
       showMessage(returnMsg);
   }

  }
}

这里的函数doResponse函数就是起到doHandler的作用(说过了嘛,doHandler函数名称可以任意取的嘛,别纠着函数名不放好不好).

关键的地方在于通过什么来获取服务器给我们返回的数据.XMLHttpRequest对象上提供两个属性供我们抉择.

2.4.1.responseText-如果服务器端返回的是普通的文本信息的话,用它就够了.

2.4.2.responseXML-如果服务器端返回的是xml格式的数据,则需要用它.而如果用它的话,那么就需要dom技术来解析其中的数据喽!(见下回分解)

大功告成,一切的一切都已经OK,请问,您酒醒了吗?
分享到:
评论

相关推荐

    发现一个不错的ajax开发框架ext-1.0.1

    博文链接:https://superbo8888.iteye.com/blog/80111

    基于opencv实现象棋识别及棋谱定位python源码+数据集-人工智能课程设计

    基于opencv实现象棋识别及棋谱定位python源码+数据集-人工智能课程设计,含有代码注释,满分课程设计资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 基于opencv实现象棋识别及棋谱定位python源码+数据集-人工智能课程设计,含有代码注释,满分课程设计资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。 基于opencv实现象棋识别及棋谱定位python源码+数据集-人工智能课程设计,含有代码注释,满分课程设计资源,新手也可看懂,期末大作业、课程设计、高分必看,下载下来,简单部署,就可以使用。该项目可以作为课程设计期末大作业使用,该系统功能完善、界面美观、操作简单、功能齐全、管理便捷,具有很高的实际应用价值。基于opencv实现象棋识别及棋谱定位python源码+数据集

    基于Python实现的Cowrie蜜罐设计源码

    该项目为基于Python实现的Cowrie蜜罐设计源码,共计380个文件,涵盖166个Python源代码文件,以及包括RST、SQL、YAML、Markdown等多种类型的配置和文档文件。Cowrie蜜罐是一款用于记录暴力攻击和攻击者执行的SSH及Telnet交互的中等交互式蜜罐。

    QT 摄像头获取每一帧图像数据以及opencv获取清晰度

    QT 摄像头获取每一帧图像数据以及opencv获取清晰度

    基于asp.net的(CS)地震预测系统设计与实现.docx

    基于asp.net的(CS)地震预测系统设计与实现.docx

    基于Springboot和Mysql的医院药品管理系统代码(程序,中文注释)

    医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统-医院药品管理系统 1、资源说明:医院药品管理系统源码,本资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 2、适用人群:计算机相关专业(如计算计、信息安全、大数据、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工等学习者,作为参考资料,进行参考学习使用。 3、资源用途:本资源具有较高的学习借鉴价值,可以作为“参考资料”,注意不是“定制需求”,代码只能作为学习参考,不能完全复制照搬。需要有一定的基础,能够看懂代码,能够自行调试代码,能够自行添加功能修改代码。 4. 最新计算机软件毕业设计选题大全(文章底部有博主联系方式): https://blog.csdn.net/2301_79206800/article/details/135931154 技术栈、环境、工具、软件: ① 系统环境:Windows ② 开发语言:Java ③ 框架:SpringBo

    mqtt单点到点聊天工具

    mqtt单点到点聊天工具

    【图像融合】基于matlab GUI拉普拉斯金字塔+小波变换图像融合【含Matlab源码 857期】.zip

    CSDN海神之光上传的代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博客文章底部QQ名片; 4.1 博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作 图像融合:小波变换图像融合、遗传算法图像融合、IHS图像融合、PCA图像融合、curvelet变换图像融合、拉普拉斯金字塔+NSCT图像融合、医学图像图像融合、高分辨全色图像融合 DSIFT多聚焦图像融合、加权平均法图像融合、泊松彩色图像融合、主成分结合小波离散变换PCA-DWT图像融合、矩阵优化图像融合、导向滤波图像融合、拉普拉斯图像融合、系数绝对值最大图像融合

    基于ZCAM E2系列相机的OBS设计源码实现

    该项目为OBS直播软件的扩展设计源码,采用C++语言编写,并包含C、Shell和C等其他语言。源码共99个文件,其中包含16个头文件、11个PowerShell脚本、9个C++源文件、6个ZSH脚本、5个Shell脚本、5个输入文件、4个INI配置文件、3个YAML文件、3个文本文件、2个JSON文件。源码实现将ZCAM E2系列相机直接集成至OBS作为直播源,支持直播功能。

    VLOOKUP函数:在Excel中查找并返回数组特定元素的实用指南

    在Excel中处理数据时,我们经常需要从大量数据中提取特定的信息。VLOOKUP函数(垂直查找函数)是一个非常强大的工具,它可以帮助我们在数据表中查找并返回相应的值。本文将详细探讨如何使用VLOOKUP函数查找并返回数组中的特定元素,包括函数的语法、使用技巧和实际应用中的代码示例。 VLOOKUP函数是Excel中进行数据查找和提取的强大工具。通过使用VLOOKUP进行精确匹配、近似匹配、数组公式和反向查找,可以有效地从数组中查找并返回特定的元素。此外,使用IFERROR和数据类型检查可以提高数据查找的准确性和可靠性。通过这些技巧和方法,可以确保VLOOKUP函数在各种情况下都能准确无误地执行。

    拷贝到Windows 10的C:\Windows\System32或C:\Windows\SysWOW64,之后重启电脑

    拷贝到Windows 10的C:\Windows\System32或C:\Windows\SysWOW64,之后重启电脑

    excel统计分析(3): 一元线性回归分析

    excel统计分析(3): 一元线性回归分析

    基于matlab碳交易机制下考虑需求响应的优化运行【含Matlab源码 期】.zip

    CSDN海神之光上传的全部代码均可运行,亲测可用,直接替换数据即可,适合小白; 1、代码压缩包内容 主函数:main.m; 调用函数:其他m文件;无需运行 运行结果效果图; 2、代码运行版本 Matlab 2019b;若运行有误,根据提示修改;若不会,可私信博主; 3、运行操作步骤 步骤一:将所有文件放到Matlab的当前文件夹中; 步骤二:双击打开main.m文件; 步骤三:点击运行,等程序运行完得到结果; 4、仿真咨询 如需其他服务,可私信博主或扫描博主博客文章底部QQ名片; 4.1 CSDN博客或资源的完整代码提供 4.2 期刊或参考文献复现 4.3 Matlab程序定制 4.4 科研合作

    精简博客系统 基于Springboot和Mysql的精简博客系统代码(程序,中文注释)

    精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统-精简博客系统 1、资源说明:精简博客系统源码,本资源内项目代码都经过测试运行成功,功能ok的情况下才上传的。 2、适用人群:计算机相关专业(如计算计、信息安全、大数据、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工等学习者,作为参考资料,进行参考学习使用。 3、资源用途:本资源具有较高的学习借鉴价值,可以作为“参考资料”,注意不是“定制需求”,代码只能作为学习参考,不能完全复制照搬。需要有一定的基础,能够看懂代码,能够自行调试代码,能够自行添加功能修改代码。 4. 最新计算机软件毕业设计选题大全(文章底部有博主联系方式): https://blog.csdn.net/2301_79206800/article/details/135931154 技术栈、环境、工具、软件: ① 系统环境:Windows ② 开发语言:Java ③ 框架:SpringBoot ④ 架构:B/S、MVC ⑤ 开发环境:IDE

    基于Scrapy框架的豆瓣电影爬虫系统

    项目介绍使用Scrapy框架爬取豆瓣电影,豆瓣选影视页面分别筛选地区为中国大陆、香港、台湾(可更换为其他地区),构造Ajax请求,获取电影id,再通过id构造电影链接,解析页面后获得电影详细数据,如名称、年份、导演、主演、类型等。 在IT行业中,网络爬虫是获取大量数据的重要手段,尤其在金融数据分析领域,如股票评论数据,能够为投资者提供宝贵的市场情绪参考。本项目聚焦于使用Python的Scrapy框架来批量爬取豆瓣电影网的数据,从而进行数据分析。 Scrapy是一个强大的Python爬虫框架,它提供了一整套解决方案,包括网页抓取、解析、数据存储等。使用Scrapy,我们可以高效地构建起一个完整的爬虫项目,其主要组件包括Spiders、Item、Item Pipeline、Downloader Middleware和Settings等。 1. **Spiders**:是Scrapy的核心,负责定义如何抓取数据以及如何处理抓取到的数据。在这个项目中,我们需要创建一个Spider,设置其起始URL(通常是豆瓣电影网的评论页面),并定义如何解析HTML页面,提取评论内容、用户名、

    基于c语言的配有图片和音乐的打字母游戏.zip

    基于c语言的配有图片和音乐的打字母游戏.zip

    基于asp.net的歌迷购物网设计与实现.docx

    基于asp.net的歌迷购物网设计与实现.docx

    基于Vue框架的hao123程序员网址导航设计源码

    该项目是一款基于Vue框架构建的程序员网址导航系统源码,包含136个文件,包括56个PNG图片、49个ICO图标、11个Vue组件文件、5个JavaScript文件以及少量JSON、YAML和其他配置文件。该系统以简洁明了的界面,为程序员提供便捷的网址导航服务。

    MPU6050 DMP文件移植包

    MPU6050 DMP文件移植包

    PyOpenGL-3.0.1 (2).zip

    opengl安装包

Global site tag (gtag.js) - Google Analytics