B/S模式(同步)AJAX技术(异步)
同步(Synchronization),就是最常见的click-refresh模式,点一个连接或提交一个表单,然后整个页面被刷新. 异步(Asynchrony),当前很热的AJAX就是典型例子,提交请求返回对象是不可见的层,然后用js根据返回数据,改变当前页面显示,譬如google map....
最为常见的HTTP请求,普通上网浏览页面就是GET。GET方式的参数请求直接跟在URL后,以问号开始。(JS中用window.location.search获得)。参数可以用encodeURIComponent进行编码,使用方式: var EnParam = encodeURIComponent(param); URL只支持大约2K的长度,即2048字符数;使用GET进行AJAX请求时候会缓存导致出现的页面不是正确的,一般方法加random参数值;ajax.send(null)。
同步与异步: 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,如果没有,则向服务器发出请求. 解决方案: 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异步结合伪静态请求数据返回状态处理业务. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |