B/S模式(同步)AJAX技术(异步)

前端之家收集整理的这篇文章主要介绍了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

向服务器提交数据时使用。

需要将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
3functionRequestByGet(nProducttemp,nCountrytemp)
4{
5varxmlhttp
6
7if(window.XMLHttpRequest)
8{
9//isIE=false;
10xmlhttp=newXMLHttpRequest();
11}
12elseif(window.ActiveXObject)
13{
14//isIE=true;
15xmlhttp=newActiveXObject("Microsoft.XMLHTTP");
16}
17
18//Webpagelocation.
19varURL="http://www.baidu.com/;
20xmlhttp.open("GET",URL,false);
21//xmlhttp.SetRequestHeader("Content-Type","text/html;charset=Shift_JIS")
22xmlhttp.send(null);
23varresult=xmlhttp.status;
24
25//OK
26if(result==200)
27{
28document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText;
29}
30xmlhttp=null;
31}
32
33
34//异步传输模式
35varxmlhttp
36
37functionRequestByGet(nProducttemp,nCountrytemp)
38{
39if(window.XMLHttpRequest)
40{
41//isIE=false;
42xmlhttp=newXMLHttpRequest();
43}
44elseif(window.ActiveXObject)
45{
46//isIE=true;
47xmlhttp=newActiveXObject("Microsoft.XMLHTTP");
48}
49
50//Webpagelocation.
51varURL="http://www.baidu.com/";
52xmlhttp.open("GET",true);
53xmlhttp.onreadystatechange=handleResponse;
54//xmlhttp.SetRequestHeader("Content-Type","text/html;charset=UTF-8")
55xmlhttp.send(null);
56}
57
58functionhandleResponse()
59{
60if(xmlhttp.readyState==4&&xmlhttp.status==200)
61{
62document.getElementById("div_RightBarBody").innerHTML=xmlhttp.responseText;
63xmlhttp=null;
64}
65}
66

总结:

Get是向服务器取数据的一种请求,而Post是向服务器提交数据的一种请求
Get是获取信息,而不是修改信息,类似数据库查询功能一样,数据不会被修改
Get请求的参数会跟在url后进行传递,请求的数据会附在URL之后,以?号分割URL和传输数据,参数之间以&号相连,%XX中的XX为该符号以16进制表示的ASCII,如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用BASE64加密。
Get传输的数据有大小限制,因为GET是通过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了,不同的浏览器对URL的长度的限制是不同的。
GET请求的数据会被浏览器缓存起来,用户名和密码将明文出现在URL上,其他人可以查到历史浏览记录,数据不太安全。在服务器端,用Request.QueryString来获取Get方式提交来的数据
Post请求则作为http消息的实际内容发送给web服务器,数据放置在HTML Header内提交,Post没有限制提交的数据。Post比Get安全,当数据是中文或者不敏感的数据,则用get,因为使用get,参数会显示在地址,对于敏感数据和不是中文字符的数据,则用post
POST表示可能修改变服务器上的资源的请求,在服务器端,用Post方式提交的数据只能用Request.Form来获取


使用get方式提交的问题:

  1. 如何创建在大部分浏览器中都能运行的XMLHttpRequest对象.
  2. 使用get请求时存在缓存问题
  3. 中文乱码问题
其中,第一个问题,在《 XMLHttpRequest 对象详解 》一文中已经解决;

对于第二个问题,产生的原因是:

get请求会每次访问缓存,看其中是否有匹配的url,如果有,则返回缓存中的url,如果没有,则向服务器发出请求.

解决方案:

1.在url上加个动态的变化参数,以求每次访问的是不同的url,这样每次都会向服务器发出新的请求.

对于第三个问题,我们首先来看下产生乱码的原因:

xmlHttp返回的数据默认是uft-8,如果客户端页面是gb2312或其他编码,就会产生乱码

解决方案:

1.若客户端是gb2312,则在输出时,指定输出流编码

2.客户端和服务器端都使用utf-8编码

3.务必使用encodeURIComponent方法对参数进行编码




使用post方式提交的问题:

1.使用POST方式传递参数的用法:

浏览器会把各表单中字段元素及其数据作为Http消息的实体内容发送给Web服务器.

参数是随着send方法发送出去的,如send(data).,服务器端字符集设置采用request.setCharacterEncoding("UTF-8");语句。做到客户端HTML编码与服务器端request.setCharacterEncoding("UTF-8");保持一致.服务器端获取参数时,需要使用Request.Form[data].


2.对于请求是key-value对的形式传递数据,可以采用POST方式,对于复杂的参数可以考虑使用JSON或者XML方式传递。


3.要注意设置Content-Type的内容为application/x-www-form-urlencoded,设置此内容是为了确保服务器知道实体中有参数变量.

4.选择合适方法处理服务器的响应。


下一篇将介绍ajax异步结合伪静态请求数据返回状态处理业务.

猜你在找的Ajax相关文章