首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

利用 Dojo Toolkit 使用 web 服务(3)

利用 Dojo Toolkit 使用 web 服务(3)

调用一个服务现在您已经创建了 index.html 文件,并将 Dojo JavaScript 文件链接到您的 index.html 文件了,是时候调用一个简单服务,来为用户提供建议选项了。
本文提供两个不同的调用服务和得到结果的示例。第一个是一个简单的服务,不一定要符合常见 RESTful web 服务 URL 习惯。REST 不是一个标准,但是有很多方法可以巧妙地获取 URL,为客户端和 RESTful web 服务提供一个较好的互操作性。第二个实例是一个使用 dojox.rpc.Rest 方法的介绍。
使用一个简单服务因为来自服务的响应根据查询字符串进行改变,服务不需要您以一个动态 web 应用程序技术写入其中(参考 ,了解更多关于动态 web 应用程序的信息)。清单 5 中显示的是一个简单的 PHP 脚本,有一个名称数组。根据用户所提供的,从名称列表中过滤出来,然后将它们添加到 Extensible Markup Language (XML) 响应。
清单 5. 使用 PHP 编写一个简单的服务
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
header("Content-type: text/xml");

$data = array(
    "Bilbo Baggins",
    "Frodo Baggins",
    "Samwise (Sam) Gamgee",
    "Meriadoc (Merry) Brandybuck",
    "Peregrin (Pippin) Took");

$resultXML = '';
$resultsXML .= '<suggestions>';

foreach ($data as $d) {
    $pattern = '/'.$_GET['s'].'/';
    if (preg_match($pattern, $d)) {
        $resultsXML .= '<item>'.$d.'</item>';
    }
}

$resultsXML .= '</suggestions>';

print($resultsXML);




您可以以其他任何语言编写一个简单的脚本,返回一个类似的响应来测试 JavaScript 代码。
从 Dojo Toolkit 调用 URL 并不是很容易。如清单 6 所示简单地设置参数进行调用,然后将它们传递到服务。
清单 6. 为 dojo.xhrGet 设置参数
1
2
3
4
5
6
7
8
var args = {
   url:"mockService.php?s=" + dojo.byId("searchBox").value,
   handleAs:"xml",
   preventCache:true,
   load:function(data) {
       // handle the data...
   },
   error:function(error) { target.innerHTML = "Error:" + error; }




这些参数将在表 1 中进一步说明。
表 1.  dojo.xhrGet 参数参数说明url此参数包括 URL(记住,这个 URL 不是一个 RESTful URL)。handleAsjson、text 或 xml 之一。PHP 脚本使用 XML 响应,所以用在这里。preventCache如果您不想缓存数据,使用 ture。缓存数据可以执行得更快,但是,如果结果是完全自动化的,这也不可取。load该回调函数在服务返回数据时执行。error该回调函数在出现错误时执行。
如果已经正确设置了参数,将它们传递到 dojo.xhrGet 方法。全部代码如清单 7 所示。
清单 7. 全部 JavaScript 代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Test web page</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel="stylesheet" type="text/css" href="styles/main.css" />
<script
    src="//ajax.googleapis.com/ajax/libs/dojo/1.5/dojo/dojo.xd.js"
    type="text/javascript"></script>
<script type="text/javascript">
//<![CDATA[
    // You could move all this code to a JavaScript file and include it...
    dojo.require("dojox.xml.parser");
     
    function update() {

        if (dojo.byId("searchBox").value.length < 3 )
            return;
         
        var target = dojo.byId("suggestions");

        var args = {
                url:"mockService.php?s=" + dojo.byId("searchBox").value,
                handleAs:"xml",
                preventCache:true,
                load:function(data) {
                    // handle the data...
                },
                error:function(error) { target.innerHTML = "Error:" + error; }
        };
        var ajaxCall = dojo.xhrGet(args);
    }
//]]>
</script>
</head>
<body>
<div id="wrapper">
<form>
<div id="search"><input id="searchBox" type="text"
    maxlength="2048" name="criteria" title="Search" onkeyup="update()" /></div>
<div id="suggestions"></div>
</form>
</div>
</body>
</html>




除了调用标准 Ajax 风格服务之外,您也要使用 Dojo Toolkit 调用 RESTful web 服务。
返回列表