示例介绍 |
作为示例,本文以 JavaScript 为工具,构建 HTTP 请求与 SuperMap iServer 进行交互,说明 REST 服务的访问与使用过程;利用 REST API 实现进行一些主要的地图操作,介绍 SuperMap iServer REST 服务提供的丰富功能。
有关构建 HTTP 请求的详细说明,请参见:客户端构建 REST 请求。
有关示例的源代码,请参见:%SuperMap iServer_HOME%\samples\code 文件夹。
示例中要引用到两个 JavaScript 文件,json_parse.js 和 toJSON.js。可以在 json_parse.js 提供了 JSON 字符串的解析函数 json_parse,toJSON.js 提供了获取 XMLHttpRequest 对象的函数 getcommit、将 JavaScript 对象转化为 JSON 字符串的函数 toJSON。可以在%SuperMap iServer_HOME%\samples\code\UseRESTAPI\HelloREST 目录下获取到。
首先构建一个简单的 HTML 页面,用于结果的展示,本文所有示例的展示都基于该 HTML 页面:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>REST 示例</TITLE>
<script type="text/javascript" src="json_parse.js"></script>
<script type="text/javascript" src="toJSON.js"></script>
</HEAD>
<BODY>
<input type="button" name="Submit" value="Test" onclick="" /></input>
<br><br>
<div align=left id="container" style="left:50px;top:50px">
</BODY>
<script type="text/javascript">
//示例代码添加的地方
</script>
</HTML>
说明:Test 是一个按钮,用来执行示例代码,container 是一个 Div,用来展示示例的结果,示例代码以方法的形式放在“//示例代码添加的地方”下面,然后把方法名添加在 Test 的“onclick=”后面,这样,在点击 Test 的时候,就会在 container 中看到结果。
构建一个对 maps 资源执行 GET 请求的应用,并将服务器响应全部显示出来,在“//示例代码添加的地方”下面构建方法 getMapsAll()如下:
//示例代码添加的地方
function getMapsAll()
{
//获取 XMLHttpRequest 对象
var commit=getcommit();
//HTTP 请求的方法类型,这里是 GET
var method="GET";
//请求的地址,即 maps 资源
var uri="http://localhost:8090/iserver/services/map-china400/rest/maps.json";
//设置是否为异步通信
var async=false;
//用户名和密码,当服务器需要验证时指定
var user="";
var password="";
//消息体(Entity Body)内容
var entry=null;
//建立 HTTP 连接
commit.open(method,encodeURI(uri),async,user,password);
//设置消息头(Message Headers)
commit.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8");
//发送 HTTP 请求
commit.send(entry);
//commit.responseText 就是接收的服务器响应
//alert(commit.responseText);
//解析从服务器端返回的 json 字符串,解析为一个 JavaScript 对象。
var response = json_parse(commit.responseText, null);
//获取用作显示的 Div 容器。
var container = document.getElementById('container');
//显示所有响应内容
container.innerHTML +=toJSON(response);
}
然后将 getMapsAll()方法添加到 Test 中,如下:
<input type="button" name="Submit" value="Test" onclick="getMapsAll()" /></input>
启动本机的 SuperMap iServer REST 服务,在 HTML 页面中点击 Test 按钮,会得到对 http://localhost:8090/iserver/services/map-china400/rest/maps.json 执行 GET 请求的响应,效果如下:
至此,一个简单的 HTTP 请求构建完成,在 SuperMap iServer REST 服务中,每一个资源对应一个 URI 地址,对资源执行不同的 HTTP 方法可以对资源进行不同的操作,HTTP 请求的参数包含的 URI 中或消息体(Entity Body)中。
示例中需要说明:
示例中,将返回内容(commit.responseText)解析为 JavaScript 对象是为了内容提取的方便,即可以参考服务器响应的结构,提取我们关心的内容。
示例代码里没有使用异步通信模式(var async=false;),即服务器响应之后 send()方法之后的脚本才会继续执行,这是为了简化代码,侧重说明 SuperMap iServer REST API 使用的问题。实际应用中,一般要使用异步通信模式,并在 XMLHttpRequest 的 onreadystatechange 属性触发的事件中对服务器的响应进行处理。
以下示例只说明实现相应功能的方法示例代码,完整示例的构建同上。