B/S状态(同步)AJAX技术(异步)
同步(Synchronization)。它是最常见的click-refresh状态,或提交一个表单,然后整个页面被刷新.
异步(Asynchrony)。当前非常热的AJAX就是典型样例,提交请求返回对象是不可见的层,然后用js依据返回数据,改变当前页面显示。譬如google map....
GET
最为常见的HTTP请求。普通上网浏览页面就是GET。
GET方式的參数请求直接跟在URL后,以问号開始。(JS中用window.location.search获得)。參数能够用encodeURIComponent进行编码。使用方式:
var EnParam = encodeURIComponent(param);
URL仅仅支持大约2K的长度,即2048字符数;使用GET进行AJAX请求时候会缓存导致出现的页面不是正确的,一般方法加random參数值;ajax.send(null)。
POST
向server提交数据时使用。
须要将form表单中的值先取出转换成字符串,用&符号连接。(同GET传參数一样);提交数据量2GB ;使用ajax.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded')。处理提交的字符串;ajax.send(strings)。这个strings表示form中须要提交的内容。比如a=1&b=2类似这种字符串。
同步与异步:
ajax.open方法中,第3个參数是设同步或者异步。prototype等js类库一般都默觉得异步,即设为true。先说下同步的情况下,js会等待请求返回,获取status。不须要onreadystatechange事件处理函数。
而异步则须要onreadystatechange事件处理。且值为4再正确处理以下的内容。
(注:文中的 ajax 表示XMLHTTP请求对象。)
1 //同步传输模式
2
3 function RequestByGet(nProducttemp,nCountrytemp)
4 {
5 var xmlhttp
6
7 if (window.XMLHttpRequest)
8 {
9 //isIE = false;
10 xmlhttp = new XMLHttpRequest();
11 }
12 else if (window.ActiveXObject)
13 {
14 //isIE = true;
15 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
16 }
17
18 //Web page location.
19 var URL="http://www.baidu.com/;
20 xmlhttp.open("GET",URL, false);
21 //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=Shift_JIS")
22 xmlhttp.send(null);
23 var result = xmlhttp.status;
24
25 //OK
26 if(result==200)
27 {
28 document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText;
29 }
30 xmlhttp = null;
31 }
32
33
34 //异步传输模式
35 var xmlhttp
36
37 function RequestByGet(nProducttemp,nCountrytemp)
38 {
39 if (window.XMLHttpRequest)
40 {
41 //isIE = false;
42 xmlhttp = new XMLHttpRequest();
43 }
44 else if (window.ActiveXObject)
45 {
46 //isIE = true;
47 xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
48 }
49
50 //Web page location.
51 var URL="http://www.baidu.com/";
52 xmlhttp.open("GET",URL, true);
53 xmlhttp.onreadystatechange = handleResponse;
54 //xmlhttp.SetRequestHeader("Content-Type","text/html; charset=UTF-8")
55 xmlhttp.send(null);
56 }
57
58 function handleResponse()
59 {
60 if(xmlhttp.readyState == 4 && xmlhttp.status==200)
61 {
62 document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText;
63 xmlhttp = null;
64 }
65 }
66
总结:
Get是向server取数据的一种请求。而Post是向server提交数据的一种请求
Get是获取信息,而不是改动信息。类似数据库查询功能一样,数据不会被改动
Get请求的參数会跟在url后进行传递。请求的数据会附在URL之后,以?号切割URL和数据传输。參数之间以&号相连,%XX中的XX为该符号以16进制表示的ASCII,假设数据是英文字母/数字,原样发送,假设是空格,转换为+。假设是中文/其它字符,则直接把字符串用BASE64加密。
Get传输的数据有限制大小。由于GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了,不同的浏览器对URL的长度的限制是不同的。
GET请求的数据会被浏览器缓存起来。username和password将明文出如今URL上,其它人能够查到历史浏览记录,数据不太安全。在server端。用Request.QueryString来获取Get方式提交来的数据
Post请求则作为http消息的实际内容发送给webserver,数据放置在HTML Header内提交,Post没有限制提交的数据。Post比Get安全。当数据是中文或者不敏感的数据,则用get,由于使用get。參数会显示在地址,对于敏感数据和不是中文字符的数据,则用post
POST表示可能改动变server上的资源的请求,在server端。用Post方式提交的数据仅仅能用Request.Form来获取
使用get方式提交的问题:
- 怎样创建在大部分浏览器中都能执行的XMLHttpRequest对象.
- 使用get请求时存在缓存问题
- 中文乱码问题
当中,第一个问题,在《XMLHttpRequest 对象具体解释》一文中已经解决;
对于第二个问题,产生的原因是:
get请求会每次訪问缓存,看当中是否有匹配的url,假设有,则返回缓存中的url,假设没有,则向server发出请求.
解决方式:
1.在url上加个动态的变化參数,以求每次訪问的是不同的url,这样每次都会向server发出新的请求.
对于第三个问题,我们首先来看下产生乱码的原因:
xmlHttp返回的数据默认是uft-8,假设client页面是gb2312或其它编码,就会产生乱码
解决方式:
1.若client是gb2312,则在输出时,指定输出流编码
2.client和server端都使用utf-8编码
3.务必使用encodeURIComponent方法对參数进行编码
使用post方式提交的问题:
1.使用POST方式传递參数的使用方法:
浏览器会把各表单中字段元素及其数据作为Http消息的实体内容发送给Webserver.
參数是随着send方法发送出去的,如send(data).,server端字符集设置採用request.setCharacterEncoding("UTF-8");语句。
做到clientHTML编码与server端request.setCharacterEncoding("UTF-8");保持一致.server端获取參数时,须要使用Request.Form[data].
2.对于请求是key-value对的形式传递数据,能够採用POST方式,对于复杂的參数能够考虑使用JSON或者XML方式传递。
3.要注意设置Content-Type的内容为application/x-www-form-urlencoded,设置此内容是为了确保server知道实体中有參数变量.
4.选择合适方法处理server的响应。
下一篇将介绍ajax异步结合伪静态请求数据返回状态处理业务.
版权声明:本文博主原创文章,博客,未经同意不得转载。
B/S状态(同步)AJAX技术(异步)的更多相关文章
- 使用AJAX技术发送异步请求,HTTP服务端推送
使用AJAX技术发送异步请求 什么是AJAX AJAX指一步Javascript和XML(Asynchronous JavaScript And XML),它是一些列技术的组合,简单来说AJAX基于X ...
- 何时使用异步或同步AJAX
通常最好使用异步调用 通过优锐课核心java学习笔记中,我们可以看到,码了很多专业的相关知识, 分享给大家参考学习. AJAX代表异步JavaScript和XML,是一项允许异步更新网页的技术,这意味 ...
- 同步请求和异步请求的区别,ajax异步请求如何理解
同步请求和异步请求的区别 先解释一下同步和异步的概念 同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的 ...
- jQuery Ajax(异步改同步)
在实际使用中,我们经常会用的Ajax(异步加载,在不刷新整个网页的前提下对网页部分内容进行更新) 使用时,偶尔会遇上需要从一个接口中得到一个数组和数据对应的id,在另一个接口上再得到数据,最初写法如下 ...
- [转载]在服务器端判断request来自Ajax请求(异步)还是传统请求(同步),x-requested-with XMLHttpRequest
在服务器端判断request来自Ajax请求(异步)还是传统请求(同步) 在服务器端判断request来自Ajax请求(异步)还是传统请求(同步): 两种请求在请求的Header不同,Ajax 异步 ...
- 通用技术 : 异步调用 - Ajax技术
Ajax技术概述
- 第106天:Ajax中同步请求和异步请求
同步请求和异步请求的区别 1.同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的.信息错误又要重新 ...
- Ajax技术
1.ajax技术的背景 不可否认,ajax技术的流行得益于google的大力推广,正是由于google earth.google suggest以及gmail等对ajax技术的广泛应用,催生了ajax ...
- Ajax技术详解
Ajax技术:Ajax描述了一种主要使用脚本(JS)操纵HTTP的web应用架构,它的主要特点是使用脚本操纵HTTP和web服务器进行数据交换,不会导致页面重载.Ajax的核心是JS的XMLHttpR ...
- 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求
转http://www.ibm.com/developerworks/cn/xml/wa-ajaxintro2/ 掌握 Ajax,第 2 部分: 使用 JavaScript 和 Ajax 发出异步请求 ...
随机推荐
- ISSkin 使用技巧,WinXP 下的窗口阴影
原文 http://restools.hanzify.org/article.asp?id=109 是否觉得在使用 ISSkin 的时候感觉窗口太过平板,尤其对于那些窗口边缘和窗口内部颜色一致的皮肤尤 ...
- linux系统怎么改为中文版(转)
linux系统安装好后怎么改为中文版呢?今天就跟大家介绍下linux系统改为中文版的方法,希望能帮助到大家! 以下是linux系统改为中文版的四种方法,一起来看看: 方法1:写入环境变量 echo & ...
- Python网络资源 + Python Manual
如何学习Python + 如何有效利用Python有关的网络资源 + 如何利用Python自带手册(Python Manual) 都差点忘了说了,在看下面所有的内容之前,对于python版本不了解的, ...
- WorkFlow4.0--入门到精通系列-专题索引
原文地址:http://www.cnblogs.com/hegezhou_hot/archive/2011/06/15/2081405.html 开篇 首先.非常感谢大家的支持和厚爱,才有了这个系列, ...
- Geoserver基本使用、WMS服务发布与OpenLayers测试
1.Geoserver与OpenLayers的下载 Geoserver:http://geoserver.org/ OpenLayers:http://openlayers.org/ 2.安装部署Ge ...
- (续)线性表之双向链表(C语言实现)
在前文实现单向链表的基本操作下,本文实现双向链表的基本操作. 双向链表与单链表差异,是双向链表结点中有前向指针和后向指针.所以在插入和删除新结点元素时候不见要考虑后向指针还要考虑前向指针. 以下是双向 ...
- python 重要模块
1,使用字典的特殊字符串替换,基于字典的字符串格式化
- java 科学计数法表示转换
BigDecimal strScien = new BigDecimal("9.67953970412123E-05"); System.out.println(strScien. ...
- ARM上的linux如何实现无线网卡的冷插拔和热插拔
ARM上的linux如何实现无线网卡的冷插拔和热插拔 fulinux 凌云实验室 1. 冷插拔 如果在系统上电之前就将RT2070/RT3070芯片的无线网卡(以下简称wlan)插上,即冷插拔.我们通 ...
- 最简单也最难——怎样获取到Android控件的高度
问题 怎样获取一个控件的长和高.相信非常多朋友第一眼看见这个问题都会认为非常easy,直接在onCreate里面调用getWidth.getMeasuredWidth不就能够获得了吗,可是.事实上是并 ...