在web应用中,前台和后台通信交互是必不可少的,如:js获取后台数据库信息、用户在前端发送控制指令等等,这些都需要通信交互。
一般的方式是:后台暴露一个接口,然后前端对该接口发送请求,并附带相关参数。后台暴露的接口统称为web service,其中按协议分为:SOAP 和REST的。从统一性和标准性来说,基于REST的服务接口无疑是当今的主流。
前端获取后台信息的方式也有很多种,如:asp/jsp前后台代码混合的方式;使用<script>、<iframe>标签请求后台信息;以及现在大规模的ajax方式。ajax方式对于一般web应用开发者来说,可以借助于第三方ajax框架来完成,主流的ajax框架有:JQuery、Dojo、Ext等等,他们不但有丰富的UI效果,封装了浏览器之间的差异,而且在使用ajax上也是十分简洁。
在有些情况,我们希望了解ajax框架这些异步请求的内部是如何做到的,而XmlHttpRequest正是ajax的核心。
以下说明都是基于XmlHttpRequest的ajax方式。
第一段代码演示的功能有:
1、XmlHttpRequest中如何同步和异步ajax请求?
2、如何请求Soap协议的服务?
3、如何传递不同的数据结构给服务的(分:xml/json)?
4、asp.net封装的ScriptManager是怎么实现ajax的?
2
3 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
4 <html xmlns="http://www.w3.org/1999/xhtml">
5 <head >104 </html>
第二段代码演示的功能有:
1、如何请求REST协议的服务?
2、js如何跨域?<跨域请参考: ArcGIS for Server 10.1系列 - 动态获取权限Token >
2 var XHR = commClass.get_xmlHttpRequest();
3 if (XHR != null) {
4 //POST方式请求Rest
5 XHR.open("POST", agsTokenUri, false);
6 XHR.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
7 XHR.onreadystatechange = function () {
8 tokenCallback.apply(XHR);
9 };
10 //IP方式
11 XHR.send("username=wangsh&password=123456&client=referer&referer=" + appUri + "&expiration=1000&f=pjson");
12 //HTTP Referer方式
13 //XHR.send("username=wangsh&password=123456&client=referer&referer=" + appUri + "&expiration=1000&f=pjson");
14 }
15 XHR = null;
16 }
17
18 /**
19 * 回调函数
20 */
21 function tokenCallback() {
22 try {
23 if (this.readyState == 4) //请求状态为4表示成功
24 {
25 if (this.status == 200) //http 状态200表示OK
26 {
27 var _backInfo = eval('(' + this.responseText + ')');
28 var _token = _backInfo.token;
29 if (_token != null) {
30 init(_token);
31 }
32 }
33 else //http 返回状态失败
34 {
35 alert("服务端返回状态" + this.statusText);
36 }
37 }
38 }
39 catch (ex0) {
40 }
41 }