Ajax的工作

Ajax直觉认识:我们发送一个请求,但是这个请求比较特殊它是异步的,也就是说客户端是不会感觉到的。在发送这个请求的时候我们绑定了一个事件,这个事件会监控我们发送请求的状态,并且每次状态改变都会触发,所以我们就可以根据不同的状态让他执行不同的操作。请求到达服务器端的后服务器端根据相应的请求返回对应的信息,这个返回信息我们可以取得并且是异步得到,不会引起客户端刷新。既然在上面已经绑定了监控状态变化的事件,我们就可以在那里首先做好在得到返回信息要做的处理(当然如果失败也会有相应的状态我们也会做出相应的处理),我们在处理中得到返回信息通过javascript在客户端做相应操作

 即可。
 
Ajax核心
 —XMLHttpRequest上面我们大概感受了一下Ajax的过程,我们发现发送异步请求才是核心,事实上它就是XMLHttpRequest,整个Ajax之所以能完成异步请求完全是因为这个对应可以发送异步请求的缘故。而且我们又发现上面那个事件就是整个处理过程的核心,可以根据不同状态执行不同操作,其实它就是XMLHttpRequest的方法onreadystatechange,它在每次状态发生改变时都会触发。那么是谁取得的返回信息呢?它就是XMLHttpRequest的另一个方法responseText(当然还有responseXML)。(⊙o⊙)哦,我们还没有说发送给谁以及执行发送操作,这两个就是XMLHttpRequest的open和send方法。Y(^o^)Y,其他的当然还有了,我们直接列出来吧:
 
XMLHttpRequest对象属性readyState请求状态,开始请求时值为0直到请求完成这个值增长到4responseText目前为止接收到的响应体,readyState<3此属性为空字符串,=3为当前响应体,=4则为完整响应体responseXML服务器端相应,解析为xml并作为Document对象返回status服务器端返回的状态码,=200成功,=404表示“NotFound”statusText用名称表示的服务器端返回状态,对于“OK”为200,“NotFound”为400方法setRequestHeader()向一个打开但是未发生的请求设置头信息
 
open()          初始化请求参数但是不发送
 
send()          发送
 
Http            请求
 
abort()        取消当前相应
 
getAllResponseHeaders()把http        相应头作为未解析的字符串返回
 
getResponseHeader()        返回http相应头的值
 
事件句柄  onreadystatechange
 
每次readyState改变时调用该事件句柄,但是当readyState=3
 
有可能调用多次代码实现ajax.js
 
文件代码,也是我们说的主要内容,是一个javascript文件,所有的Ajax操作都在这里:
 
viewplaincopytoclipboardprint?
1.//与服务器通信
2.functiontalktoServer(url){3.varreq=newXMLHTTPRequst();4.varcallbackHandler=getReadyStateHandler(req);5.req.onreadystatechange=callbackHandler;6.req.open("POST",url,true);7.req.setRequestHeader("Content-Type","application/x-www-form-urlencoded");8.vartestmsg=document.getElementById("testmsg");9.varmsg_value=testmsg.value;10.req.send("msg="+msg_value);11.}12.//创建XMLHTTP对象13.functionnewXMLHTTPRequst(){14.varxmlreq=false;15.if(window.XMLHttpRequest){16.xmlreq=newXMLHttpRequest();17.}elseif(window.ActiveXobject){18.try{19.xmlreq=newActiveXObject("Msxm12.XMLHTTP");20.}catch(e1){
 
21.try
 
{22.xmlreq=new
 
ActiveXObject("Microsoft.XMLHTTP");23.}catch(e2)
 
{
 
24.25.
 
}26.
 
}27.
 
}28.return
 
xmlreq;29.
 
}30.//
 
服务器回调函数31.functiongetReadyStateHandler(req)
 
{32.returnfunction()
 
{33.if(req.readyState==4)
 
{34.if(req.status==200)
 
{35.varmsg_display=
 
document.getElementById("msg_display");36.msg_display.innerHTML=
 
req.responseText;37.}else
 
{38.varhellomsg=
 
document.getElementById("hellomsg");39.hellomsg.innerHTML="ERROR"+
 
req.status;40.
 
}41.
 
}42.
 
}43.
 
}//
 
与服务器通信functiontalktoServer(url)
 
{varreq=
 
newXMLHTTPRequst();varcallbackHandler=
 
getReadyStateHandler(req);req.onreadystatechange=
 
callbackHandler;req.open("POST",url,
 
true);req.setRequestHeader("Content-Type","
 
application/x-www-form-urlencoded");vartestmsg=document.getElementById("
 
testmsg");varmsg_value=
 
testmsg.value;req.send("msg="+msg_value);
 
}//创建XMLHTTP
 
对象functionnewXMLHTTPRequst()
 
{varxmlreq=
 
false;if(window.XMLHttpRequest)
 
{xmlreq=new
 
XMLHttpRequest();}elseif(window.ActiveXobject)
 
{
 
try{xmlreq=new
 
ActiveXObject("Msxm12.XMLHTTP");}catch(e1)
 
{try
 
{xmlreq=newActiveXObject("Microsoft.XMLHTTP"
 
);}catch(e2)
 
{
 
}
 
}
 
}return
 
xmlreq;
 
}//
 
服务器回调函数functiongetReadyStateHandler(req)
 
{returnfunction()
 
{if(req.readyState==4)
 
{if(req.status==200)
 
{varmsg_display=document.getElementById("msg_display"
 
);msg_display.innerHTML=
 
req.responseText;}else
 
{varhellomsg=document.getElementById("hellomsg"
 
);hellomsg.innerHTML="ERROR"+
 
req.status;
 
}
 
}
 
}
 
}其他相关的代码也贴出来吧,这样才能正确执行
 
使用ajax.js代码的页面代码,也就是Default.aspx
 
前台代码:viewplaincopyto
 
clipboardprint?1.<%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="myFirst._Default"%
 
>2.<!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"
 
>3.<htmlxmlns="http://www.w3.org/1999/xhtml"
 
>4.<headrunat="server"
 
>5.
 
<title></title>6.<mce:scripttype="text/javascript"src="js/ajax.js"mce_src="js/ajax.js"
 
></mce:script>7.
 
</head>8.
 
<body>9.<formid="form1"runat="server"
 
>10.
 
<div>11.<inputid="testmsg"type="text"value="helloworld"
 
/>12.<inputid="Button1"type="button"value="button"onclick="talktoServer('Ajax.aspx')"
 
/>13.<divid="msg_display"style="height:50px;"
 
>14.
 
</div>15.在此提醒大家,他对应的异步请求页一定不能有form标签,否之就只有将显示信息的div放到此页的form
 
外了16.,原因很简单:返回信息中有form,在此也显示的时候就造成了form嵌套,不允
 
许!!!17.
 
</div>18.
 
</form>19.
 
</body>20.
 
</html><%@PageLanguage="C#"AutoEventWireup="true"CodeBehind="Default.aspx.cs"Inherits="myFirst._Default"
 
%><!DOCTYPEhtmlPUBLIC"-//W3C//DTDXHTML1.0Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
 
 

Ajax实现原理的更多相关文章

  1. Ajax工作原理

    在写这篇文章之前,曾经写过一篇关于AJAX技术的随笔,不过涉及到的方面很窄,对AJAX技术的背景.原理.优缺点等各个方面都很少涉及null.这次写这篇文章的背景是因为公司需要对内部程序员做一个培训.项 ...

  2. 关于Ajax工作原理

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...

  3. Ajax工作原理(转)

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...

  4. ajax请求原理及jquery $.ajax封装全解析

    .ajax原理: Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面.这其中最关键的一步就是从服务器获得 ...

  5. Ajax的原理和运行机制

    关于ajax,是最近炒得非常火的一种技术,并且时下它也是非常流行.当然,它并不是什么新技术,而是在各种已有的技术和支持机制下的一个统一.在我的项目中,偶尔也会用到ajax,用来给用户一些无刷新的体验. ...

  6. Ajax 技术原理(转)

    Ajax 技术原理 2010-01-04 原文出处:http://www.nowamagic.net/ajax/ajax_AjaxPrinciple.php 在写这篇文章之前,曾经写过一篇关于AJAX ...

  7. (转)Ajax的原理和应用

    1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...

  8. aJax学习之Ajax工作原理

    转自:http://www.cnblogs.com/mingmingruyuedlut/archive/2011/10/18/2216553.html 在写这篇文章之前,曾经写过一篇关于AJAX技术的 ...

  9. ajax请求原理

    首先分析使用ajax时候有那些不确定的因素 请求:1 请求的方式不确定 2 请求的地址不确定 3 请求是否异步不确定 4 发送的数据不确定 响应:5 返回的数据不确定 6 响应成功之后 需要处理的业务 ...

  10. ajax的原理解析

    一.关于同步与异步的分析: 异步传输是面向字符的传输,它的单位是字符:而同步传输是面向比特的传输,它的单位是桢,它传输的时候要求接受方和发送方的时钟是保持一致的.而ajax就是采用的异步请求方式的. ...

随机推荐

  1. 05 技术内幕 T-SQL 查询读书笔记(第四章)

    第四章 子查询:在外部查询内嵌套的内部查询(按照期望值的数量分为,标量子查询 scalar subqueries,多值子查询multivalued subqueries)(按照子查询对外部查询的依赖性 ...

  2. 24-React Components组件

    Components 组件 1.组件 可以让UI独立的分割出来,可以让UI重复利用. 2.组件就像是JavaScript函数,它们能够接收任意的输入(称为"props",即属性)并 ...

  3. Thread 和 Runnable 的区别

    在java中可有两种方式实现多线程,一种是继承Thread类,一种是实现Runnable接口: Thread类是在java.lang包中定义 的.一个类只要继承了Thread类同时覆写了本类中的run ...

  4. Hibernate的映射文件配置

    对象关系的映射是用一个XML文档来说明的.映射文档可以使用工具来生成,如XDoclet,Middlegen和AndroMDA等.下面从一个映射的例子开始讲解映射元素,映射文件的代码如下: <?x ...

  5. Codeforces 722C. Destroying Array

    C. Destroying Array time limit per test 1 second memory limit per test 256 megabytes input standard ...

  6. 调试多线程 & 查死锁的bug & gcore命令 & gdb对多线程的调试 & gcore & pstack & 调试常用命令

    gdb thread apply all bt 如果你发现有那么几个栈停在 pthread_wait 或者类似调用上,大致就可以得出结论:就是它们几个儿女情长,耽误了整个进程. 注意gdb的版本要高于 ...

  7. 自动生成.py文件头部的C语言小程序

    每次都 vi xxx.py 然后再打 #!/usr/bin/env python 等等的程序头信息感觉有点麻烦,于是便想着写一个小程序自动生成这些头信息了,顺便在 ~/.bashrc 里写入 alia ...

  8. centos 7 编译zabbix 3.2.2

    已有LNMP环境. 1.安装zabbix需要的依赖包,红色部门的包官方yum源没有,需要自己下载 yum install net-snmp fping iksemel net-snmp-devel   ...

  9. 使用 StringBuilder

    嘿嘿,请不要说我是偷取,我只是借鉴一下.. String 对象是不可改变的.每次使用 System.String 类中的方法之一时,都要在内存中创建一个新的字符串 对象,这就需要为该新对象分配新的空间 ...

  10. JSP隐藏过长字段

    <div class="objDiv" title="${fof.fundName }">                        <c ...