新AJAX.docx
- 文档编号:25809316
- 上传时间:2023-06-15
- 格式:DOCX
- 页数:18
- 大小:25.20KB
新AJAX.docx
《新AJAX.docx》由会员分享,可在线阅读,更多相关《新AJAX.docx(18页珍藏版)》请在冰豆网上搜索。
新AJAX
学习使用AJAX之前,有几样的东西是必须的:
1、HTML
2、DHTML,就是动态HTML,这里可能会常用到document.getElementById([id])方法,或者是使用window.id.value=[value]等等,如果不熟悉,不及,看看下面的例子,如果还不能够理解,再把网上搜搜,这方面的解释多得不能够再多了。
3、Javascript。
这个就是非常的重要的,因为好多东西都需要通过这个去操作。
4、DOM。
这个不是必须的,就算我们不知道这个东西,照样可以用JAVASCRIT做很多的东西了。
5、数据库操作及SQL知识。
现在应用程序好多都是与数据库打交道,常见的用户名信息等等,都是放在数据库中的。
下面进行正题吧,这个实例非常的简单,采用JSP实现用户输入的用户是否存在于数据库中,并且给以相应的提示,所谓“麻雀虽小,五脏俱全”,其它的发挥就是在这个方向上发挥开发。
总共有三个文件,有两个JSP面,一个用于前台显示,一个用于确定用户是否存在;另外一个JAVA页面,用于做数据库连接。
注:
请注意其中注释,那是非常的有助于你理解
前台显示:
index.jsp
varhttpRequest;
/**
下面这个函数可以返回一个适合任何浏览器的httpRequest,步子如下:
1.试着创建一个XMLHttpRequest()示例,该示例可适合于除了微软以外的所有浏览器
2.增加错误判断,如果当前浏览器是微软的,那么就创建适用于微软的浏览器
3.但微软的浏览器又有两个版本之分,不过据说微软已经在7.0中增加对XMLHttpRequest()的支持
4.但这样也需要对原来的浏览器支持,否则你写出来的程序那些用老版本浏览器的用户就是看不
到效果的。
*/
functioncreateRequest()
{
try{
request=newXMLHttpRequest();
}catch(trymicrosoft)
{
try{
request=newActiveXObject("Msxml2.XMLHTTP");
}catch(othermicrosoft)
{
try{
request=newActiveXObject("Microsoft.XMLHTTP");
}
catch(failed)
{
request=false;
}
}
}
if(!
request)
{
alert("errHappend!
");
returnnull;
}
returnrequest;
}
/**
这个函数就是用户的动作所有触发的函数,如下面的onblur()时,就会调用该函数
经过的步骤如下:
1.从HTML页面得到你需要的数据,可以采有document.getElementById("")方法。
2.建立需要的URL,该URL就和在FORM里面的method为get时并采用submit提交在地址栏
里面到的一样
3.打开与服务器的连接,这里面有三个必要的参数,虽然文档规定只有两个,但是我个
人觉得最好用三个,
第一个可以是GET,POST或者是POST,但常用的就是前面的两个,并且最好都用大写,因
为有些浏览器如FireFox可能会报错,
第二个就是打报的URL,这肯定你是必须的。
第三个就是下面的看到的true,这里可以是false。
true表示同步处理,你提交后可以做
其它的事情,这就是AJAX里面的A,即asynchronous;如是false,那就得等到服务器的返
回才能够做其它的事情。
4.等到服务器完成,并且确定返回执行了正确执行的提示,我们就可以做下面我们想做的
事情。
这些后面的事情就必须通过Javascript去完成了,因为XMLHttpRequest的唯一用途
就是发送请求及接收服务器的响应结果。
5.上面都完成了后,就可以采用send()方法向服务器发送你需要发送的信息了,它的参数
可以是任何类型,发送的数据格式必须为这样的格式:
name=value&anothername=othervalue&so=on,如果你想传送数据,你必须更改MIME类型:
httpRequest.setRequestHeader('Content-type','application/x-www-form-urnlencoded');
否则服务器将会丢弃发送的数据。
*/
functiongetBackInfo()
{
varusername=document.getElementById("username").value;
varurl='checkUser.jsp?
username='+username;
request.open("GET",url,"true");
//下面相当于是一个隐性的循环,在函数中规定只有都接收完毕数据后才做处理
//onreadystatechange有5个值:
//0:
未初始化
//1:
初始化
//2:
发送数据
//3:
接收数据中
//4:
数据接收完毕
//另外还要注意就是在注册回调函数onreadystatechange时,后面的函数不能够带参数
//如下disResult是一个函数,不能够带参。
reqeust.onreadystatechange=disResult;//隐性的循环
request.send(null);
}
functiondisResult()
{
/**
1.一定要确定readystate==4的完成状态才做下面的事,否则会在建立连接即readystate==1的
时候就开始,然后会在readystate==2,readystate==3,readystate==4的时候都会执行,不信
你可以alert("")一个提示信息试试。
2.服务器通知完成了,并且还要保证是正确完成的,得到的是我们需要的结果才能够继续,这里
常用响应码有:
200:
成功执行
401:
未授权
403:
禁止
404:
没有找到文件
*/
if(request.readystate==4)
{
if(request.status==200)
{
//一切都OK了,那就该用Javascript去执行你想要的动作了。
document.getElementById("disCheckResult").value=request.responseText;
alert('done');
}
else
{
alert('SomethingWronghasHappend!
');
}
}
}
AJAX应用之草稿自动保存
-- 用户名默认为NONAME -->
用户名:
-- 在自动保存选项的onclick事件中调用自动保存状态设置函数 -->
自动保存?
内容:
-- AutoSaveMsg显示返回信息 -->
-- 调用函数恢复最后保存的草稿 -->
-- 将JS代码放在所有对象之后,以免在页面未加载完成时出现对象不存在的错误 -->
-- AJAX类 -->
-- 自动保存代码 -->
接下来是autosave.js
程序代码:
// 首先设置全局变量
// 要保存的内容对象FormContent
var FormContent=document.getElementById("message");
// 显示返回信息的对象
var AutoSaveMsg=document.getElementById("AutoSaveMsg");
// 用户名
var memName=document.getElementById("memName").value;
// 自动保存时间间隔
var AutoSaveTime=60000;
// 计时器对象
var AutoSaveTimer;
// 首先设置一次自动保存状态
SetAutoSave();
// 自动保存函数
function AutoSave() {
// 如果内容或用户名为空,则不进行处理,直接返回
if(!
FormContent.value||!
memName) return;
// 创建AJAXRequest对象,详细使用见文章开始的链接
var ajaxobj=new AJAXRequest;
ajaxobj.url="autosave.asp";
ajaxobj.content="memname="+escape(memName)+"&postcontent="+escape(FormContent.value);
ajaxobj.callback=function(xmlObj) {
// 显示反馈信息
AutoSaveMsg.innerHTML=xmlObj.responseText;
}
ajaxobj.send();
}
// 设置自动保存状态函数
function SetAutoSave() {
// 是否自动保存?
if(document.getElementById("Draft_AutoSave").checked==true)
// 是,设置计时器
AutoSaveTimer=setInterval("AutoSave()",AutoSaveTime);
else
// 否,清除计时器
clearInterval(AutoSaveTimer);
}
// 恢复最后保存的草稿
function AutoSaveRestore() {
// 创建AJAXRequest对象
var ajaxobj=new AJAXRequest;
// 提示用户正在恢复
AutoSaveMsg.innerHTML="正在恢复,请稍候……"
ajaxobj.url="autosave.asp";
ajaxobj.content="action=restore&memname="+escape(memName);
ajaxobj.callback=function(xmlObj) {
// 提示用户恢复成功
AutoSaveMsg.innerHTML="恢复最后保存成功";
// 如果内容为空则不改写textarea的内容
if(xmlObj.responseText!
="") {
// 恢复草稿
FormContent.value=xmlObj.responseText;
}
}
ajaxobj.send()
}
最后是autosave.asp,用于在后台保存草稿:
程序代码:
<%@LANGUAGE="VBscript"CODEPAGE="65001"%>
<%OptionExplicit%>
<%
'语言为VBScript,编码为UTF-8,要求变量声明
'出现错误则忽略,继续执行
OnErrorResumeNext
'定义一些变量
DimPostContent,memName,action,objStream
'获取操作,是保存草稿还是恢复草稿
action=Request.Form("action")
'获取用户名
memName=Request.Form("memname")
'获取草稿内容
PostContent=Request.Form("postcontent")
IFaction="restore"Then
'恢复草稿,如果用户名不为空则进行恢复操作
IFmemName<>EmptyThen
'使用ADODB.Stream来进行文件操作
SetobjStream=Server.CreateObject("ADODB.Stream")
WithobjStream
.Type=2
.Mode=3
.Open
'文件名为autosave_+用户名+.txt
.LoadFromFile(Server.MapPath("autosave_"&memName&".txt"))
.Charset="utf-8"
'.Position=0
PostContent=.ReadText()
.Close
EndWith
SetobjStream=NoThing
'输出草稿
IFPostContent<>""ThenResponse.Write(PostContent)
EndIF
Else
'保存草稿,如果草稿内容和用户名均不为空则进行保存操作
IFPostContent<>EmptyANDmemName<>EmptyThen
'使用ADODB.Stream来进行文件操作
SetobjStream=Server.CreateObject("ADODB.Stream")
WithobjStream
.Type=2
.Mode=3
.Open
.Charset="utf-8"
.Position=objStream.Size
.WriteText=PostContent
.SaveToFileServer.MapPath("autosave_"&memName&".txt"),2
.Close
EndWith
SetobjStream=NoThing
'输出保存是否成功信息
IfErr.Number=0then
Response.Write("最后于"&Now()&"自动保存成功")
Else
Response.Write("最后于"&Now()&"自动保存失败,错误号:
"&Err.Number&",错误描述:
"&Err.Dscription)
EndIf
EndIF
EndIF
%>
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
在注册或购物车结帐的时候,需要用户填入个人资料,这个环节可以简练一下,我们只需客人填入邮政编码,然后就根据这个邮政编码,自动从数据库中取出相应的省,市等地址信息。
这样既可以减少客户的输入,增加客户体验,又可以减少由于资料输入而产生的错误。
实现:
HTML
functioncreateRequestObject(){
varro;
varbrowser=navigator.appName;
if(browser=="MicrosoftInternetExplorer"){
ro=newActiveXObject("Microsoft.XMLHTTP");
}else{
ro=newXMLHttpRequest();
}
returnro;
}
varhttp=createRequestObject();
functionsndReq(zip){
http.open('get','zipcode.php?
zip='+zip);
http.onreadystatechange=handleResponse;
http.send(null);
}
functionhandleResponse(){
if(http.readyState==4){
varresponse=http.responseText;
varupdate=newArray();
if(response.indexOf('|'!
=-1)){
update=response.split('|');
document.getElementById("city").value=update[0];
document.getElementById("state").value=update[1];
}
}
}
EnterAUnitedStatesZipcode,ThenTab
php
$dbuser='root';
$dbpass='111111';
$cn=mysql_connect("localhost",$dbuser,$dbpass);
$db=mysql_select_db("ajax");
$sql="selectcity,statefromzipcodeswherezipcode=".$_REQUEST['zip'];
$rs=mysql_query($sql);
$row=mysql_fetch_array($rs);
echo$row['city']."|".$row['state'];
mysql_close($cn);
?
>
当客户输入一个POSTCODE后,zipcode.php就接收到它,然后进行从数据表中取出对应的资料,再按一定的格式返回给客户端(此处是以|分隔)。
最后客户端接收返回的资料,显示在页面上。
if(response.indexOf('|'!
=-1)){
update=response.split('|');
document.getElementById("city").value=update[0];
document.getElementById("state").value=update[1];
}
/////////////////////////////////////////
AJAX的问题
半数以上的AJAX安全风险来自隐含在服务器中的漏洞。
显然,使用安全编码技术的好的设计,对于更安全的AJAX大有帮助,我们需要感谢Max熟悉开放万维网应用安全计划(theOpenWebApplicationSecurityProject-OWASP)排名前十的最严重web应用程序安全漏洞列表(www.owasp.org)。
不幸的是,当Max实现AJAX的时候,他仍然需要面对许多额外的因素:
1.新的技术:
如果Max想把他的站点连接到一个SQL数据库,他在Google查到了数百万的例子。
AJAX技术,不管这种技术有多年轻,它仍然是出现在采购循环中相对较早的,尽管它只有很少一部分好的例子出现在网络上。
为了解决一些难处理的和不必要的复杂问题,这就要求像Max那样的开发者去自主开发。
Max也就不得不编写服务器端和客户端的代码,创建他自己不太确定的协议(特别是对服务器响应来讲)。
不管这些协议有多好,都将会及时表现在页面上。
2.非传统方式的设计:
AJAX有一点点不同于传统设计方式,因为这样的应用程序是半客户端半服务端的。
在Max的例子里,他是唯一的开发者,所以他为服务端和客户端都能够进行编码。
在同一时间使用两种不同的语言(特别是在早期阶段)进行开发将会产生一些初级的编码错误,因为他要在两端来回跳跃,对一端来讲非常好,但可能在
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- AJAX
![提示](https://static.bdocx.com/images/bang_tan.gif)