问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何用AJAX进行WEB应用程序的开发?

发布网友 发布时间:2022-05-05 23:10

我来回答

4个回答

热心网友 时间:2022-05-14 17:08

一、简介

AJAX,一个异步JavaScript和XML的缩略词,是最近出来的技术词语。异步意味着你可以经由超文本传输协议(HTTP)向一个服务器发出请求并且在等待该响应时继续处理另外的数据。这就意味着,例如,你可以调用一个服务器端脚本来从一个数据库中以XML方式检索数据,把数据发送到存储在一个数据库的服务器脚本,或者简单地装载一个XML文件以填充你的Web站点而不需刷新该页面。然而,在这项新技术提供巨大能力的同时,它也引起了在"Back"按钮问题上的很多争论。本文将帮助你确定在真实世界中何时使用AJAX是最佳选择。

首先,我假定你对缩略词JavaScript和XML部分有一个基本了解。尽管你能通过AJAX请求任何类型的文本文件,但是我在此主要集中讨论XML。我将解释怎样在真实世界中使用AJAX以及怎样在一个工程中评估它的价值。在你读完本文后,你将会明白什么是AJAX,在什么情况下,为什么以及怎样使用这项技术。你将要学习,在保持给用户提供直观体验的同时怎样创建对象,发出请求以及定制响应。

我已创建了一个适合于本文的示例工程(你可以下载源代码)。这个示例实现了一个简单的请求-它装载一个包含页面内容的XML文件并且分析数据以把它显示在一个HTML页面中。
二、常规属性和方法

表1和2提供了一个属性和方法的概述- 它们为Windows Internet Explorer 5,Mozilla,Netscape 7,Safari 1.2,和Opera等浏览器所支持。

表1属性

属性 描述

onreadystatechange 当请求对象变化时该事件处理器激活。

readyState 返回指示对象的当前状态的值。

responseText 来自服务器的响应串的版本 。

responseXML 来自服务器的响应的DOM兼容的文档对象。

status 来自服务器的响应的 状态码。

statusText 以一个字符串形式返回的状态消息。

表2方法

方法 描述

Abort() 取消当前HTTP请求。

getAllResponseHeaders() 检索所有的HTTP头值。

getResponseHeader("headerLabel") 从响应体中检索一个HTTP头部的值。

open("method","URL"[,asyncFlag[,"userName" [,"password"]) 初始化一个MSXML2.XMLHTTP请求,并从该请求指定方法,URL和认证信息 。

send(content) 发送一个HTTP请求到服务器并接收响应。

setRequestHeader ("label", "value") 指定一个HTTP头的名字。
三、从哪里开始

首先,你需要创建XML文件-后面我们对之进行请求并作为页面内容进行分析。你正在请求的文件必须与 目标工程驻留在相同的服务器上。

下一步,创建发出请求的HTML文件。当页面通过使用页面主体 中的onload方法进行加载时,该请求发生。接着,该文件需要一个有ID的div标签,这样当我们准备好要 显示内容时就可以对之进行定位。当你做完所有这些,你的页面的主体上去,如下:
<body onload="makeRequest('xml/content.xml'); ">

<div id="copy"></div>

</body>
四、创建请求对象

为了创建请求对 象,你必须检查是否浏览器使用XMLHttpRequest或ActiveXObject。这两个对象之间的主要区别在于使用 它们的浏览器。Windows IE 5 及以上版本使用ActiveX对象; 而Mozilla,Netscape 7,Opera和Safari 1.2及以上版本使用XMLHttpRequest对象。另外一个区别是你创建对象的方式:Opera,Mozilla, Netscape和Safari允许你简单地调用该对象的构造器,但是Windows IE需要把对象的名字传递到ActiveX 构造器中。下面是怎样创建代码来决定要使用哪个对象和怎样创建它的示例:

if (window.XMLHttpRequest)
{ request = new XMLHttpRequest(); }
else if (window.ActiveXObject)
{ request = new ActiveXObject("MSXML2.XMLHTTP"); }
五、发出请求

现在既然你已经创建了你的请求对象,那么你已经为向服务器发 出请求作了准备。创建一个到事件处理器的参考以听取onreadystatechange事件。然后,该事件处理器 方法将在状态发生变化时作出响应。一旦我们完成请求,我们就开始创建这个方法。打开连接以GET或 POST一个定制的URL-在此是一个content. xml,并且设置一个布尔定义-是否你想要进行异步调用。

现在到了发出请求的时间了。在这个示例中,我使用了null,因为我们使用的是GET; 为了使用 POST,你需要使用下面这个方法发出一个查询串:
request.onreadystatechange = onResponse;

request.open("GET". url, true);

request.send (null);
六、定制加载和错误处理消息

你为onreadystatechange方法创建的事件处理器 正是集中进行加载和处理错误的场所。现在到了考虑用户并针对他们与之交互的内容的状态提供反馈的 时候了。在这个实例中,我针对所有的装载状态代码提供反馈,并且也对最经常发生的错误处理状态代 码提供一些基本的反馈。为了显示请求对象的当前状态,readyState属性包括显示在下表中的一些值。

值 描述

0 未初始化,对象没有用数据进行初始化。

1 装载中,对象正在装载它 的数据。

2 装载结束,对象完成了它的数据的装载。

3 可交互,用户能与对象交互了, 尽管它还没有装载结束。

4 完成,对象已经完全被初始化。

W3C中有很长的一串有关HTTP 状态代码的定义。我选择了两个状态代码:

200:请求成功了。

404:服务器没有找到与所 请求的文件相匹配的任何东西。

最后,我检查任何另外的状况代码-它们将生成一个错误并提供 一个一般错误信息。下面是一个代码示例-你可以用之来处理这些情况。注意,我在定位我们前面在HTML 文件的主体中创建的div ID并且对它应用装载和/或错误信息-通过innerHTML方法-这个方法用于设置在 div对象的开始和结束标签之间的HTML:

if(obj.readyState == 0)
{ document.getElementById('copy').innerHTML = "Sending Request..."; }
if(obj.readyState == 1)
{ document.getElementById('copy').innerHTML = "Loading Response..."; }
if(obj.readyState == 2)
{ document.getElementById('copy').innerHTML = "Response Loaded..."; }
if(obj.readyState == 3)
{ document.getElementById('copy').innerHTML = "Response Ready..."; }
if(obj.readyState == 4){
if(obj.status == 200){ return true; }
else if(obj.status == 404)
{
// 添加一个定制消息或把用户重定 向到另外一个页面
document.getElementById('copy').innerHTML = "File not found";
}
else
{document.getElementById('copy').innerHTML = "There was a problem retrieving the XML."; }
当状况代码为200 时,这意味着请求成功。下面开始进行响应了。

七、分析响应

当你准备好分析来自请求 对象的响应时,真正的工作开始了。现在你可以用你请求的数据开始工作。仅为测试目的,在开发期间 ,可以使用responseText和responseXML属性来显示来自响应的原始数据。为了存取XML响应中的结点, 首先使用你创建的请求对象,定位到responseXML属性以检索(你可能已经猜测出来)来自响应的XML。定 位到documentElement-它检索一个到XML响应的根结点的参考。
var response = request.responseXML.documentElement;
现在既然你有了到响应的根结点的参考,那么你可以使 用getElementsByTagName()以结点名字来检索childNodes。下面一行用一个头部的nodeName来定位一个 childNode:

response.getElementsByTagName('header') [0].firstChild.data;

使用firstChild.data可以允许你存取该元素中的文本:

response.getElementsByTagName('header')[0].firstChild.data;

下面是怎样 创建这些代码的完整的例子:

var response = request.responseXML.documentElement;
var header = response.getElementsByTagName ('header')[0].firstChild.data;
document.getElementById ('copy').innerHTML = header;

八、需求分析

现在既然你知道怎样使用 AJAX的基础知识,那么下一步就是决定是否在一工程使用它。须记住的最重要的事情是,在你还没有刷 新页面时你无法使用"Back"按钮。为此,可以先专注于你的工程中的一小部分-它能够从使用 这种类型的交互中受益。例如,你可以创建一个表单-它在用户每次输入一个输入字段或一个字母时查询 一个脚本以便进行实时校验。你可以创建一个拖放页面-在释放一项时,它能够把数据发送到一个脚本中 并把该页面的状态保存到一个数据库中。使用AJAX的理由毫无疑问是存在的; 并且这种使用无论对开发 者还是用户都会带来益处; 这全依赖于具体的条件和执行情况。

还有其它方法可用来解决 "Back"按钮的问题,例如使用Google Gmail-它现在能够为你的操作提供一种撤消功能而不刷 新该页面。以后还会出现许多更具创造性的例子-它们将通过提供给开发者创建独特实时的体验的手段给 用户带来更大的好处。

九、结论

尽管AJAX允许我们构建新的和改进的方式来与一个WEB页 面进行/交互; 但是作为开发者,我们需要牢记产品是不考虑技术的; 它关心的是用户以及其如何与用户 进行交互。没有了用户群,我们构建的工程毫无用处。基于这个标准,我们就能评估应该使用什么技术 以及何时使用它们来创建对相应用户有用的应用。

参考资料:上海快网

热心网友 时间:2022-05-14 18:26

你说的是.NET 吧,首先要下载安装个AjAx框架2.0,之后在VS工具箱中会有5个核心的组件,再点右键选项卡,添加扩展的组件dll(大部分不常用),开发的时候先在页面托出ScriptManager,注意一定要放在<form>标签下面,再拖一个UpdatePanel控件,在它的模板子控件中加需要无刷新的数据控件(GrivdView)等。可以下本电子书,有很多类似教程。

热心网友 时间:2022-05-14 20:01

两位仁兄,一位只能COPY资料。一位呢,只说了怎么用控件,其实最实用的程序。是自己开发出来的。你用别人写好的程序,有的时候不一定是最好的。

你这里这个问题,过于强大。不好怎么回答。

热心网友 时间:2022-05-14 21:52

Ajax 是一门专门的技术,用于同步通讯,其用法很多:例如Google地图 ,和下拉框提示,建议你仔细学一下
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
蚂蚁泡酒适合哪些人喝 蚂蚁酒的功效与禁忌蚂蚁酒的功效与作用 热血无赖卡怎么办 了解这两方面内容 益生菌孕妇 孕妇能喝益生菌吗 羽毛球双打底线是内线还是外线 为什么泰国两位尊者有不死之身 秦始皇活了多少岁?当了几年皇帝? DELL电脑D630.PP18L2手机。才用了4个多月。多少钱我可以买呢,麻烦谁说... dellpp18l现在买多少钱 吸血鬼日记第四季22中里克复活了那他还是吸血鬼吗?科尔作为吸血鬼复活了。 OVERLORD吸血鬼真主复活后的能力和等级还在吗 我们是毕业三十年的高中同学想建立一个群应该怎样起名字 在你看来深海有哪些恐怖生物? 正宗的辣子鸡丁该怎么做 庖丁解牛事半功倍给我们的启示是 《庖丁解牛》为我们“人生之道”给予了什么启示? 庖丁解牛寓言着什么启示? 古代皮革加工用工具骨骼是如何应用的?又是如何打磨的? 考勤机哪个品牌的要好用呢?求推荐 世界上十大恐怖的未知生物是甚么??? 怎样申请新的个人邮箱? 需要个人邮箱,怎么申请一个新的账号?账号怎么设置? 优酷下载的视频为什么不能看,是转的3GP啊 2020什么时候考研 用优酷下载完的视频转存后为什么无法观看? 什么是变压器的空载损耗 重新装系统后,下载了360压缩,一双击压缩文件就不行,只能右键打开,解压后也不能用 为什么优酷下载的视频不能用其他播放器打算开呢? 变压器的损耗包括哪两部分 我捡到一颗戒指,上面刻有AU.750和DO.070ct,这是什么意思? 哎,我只喜欢黑色衣服怎么办呀 word中先加入一个页眉,然后将其删除。可是会剩下一条横线,请问如何删除??? 冥河水母有毒吗 给30岁的同学群取个好名字 黑龙江公务员考试网发布2020省考时间了吗? 取消页眉页脚设置后留下的线怎么去掉 盘白玉菩提的方法是什么? 搓还是撸 梦见在一个空房子里有一个黑动物要跟我走? 求解梦!连着两天梦见被人追求,而且不是同一个人也不是现实中存在的人。因为自己有男朋友了,所以拒绝... 几十年老同学都没见面了现在想建群起什么名字 美剧吸血鬼日记第六季中,阿里克复活了,为什么他相当于始祖? 刚刚买的白玉菩提,要怎么盘 教你怎么样搭配衣服 我的耳钉后面刻着730,这是什么意思啊 学编导考上大学以后还能上别的专业吗? 求深海中巨型怪物 很老的电影了 记得有一个情节就是一个女的被好多水母螫死了 小的时候对这部电影印 深圳个税填房贷还是租房好 360云盘现在可以离线下载吗? 支付宝免费提现2万怎么还款 变压器损耗有