Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2007423
  • 博文数量: 369
  • 博客积分: 10093
  • 博客等级: 上将
  • 技术积分: 4271
  • 用 户 组: 普通用户
  • 注册时间: 2005-03-21 00:59
文章分类

全部博文(369)

文章存档

2013年(1)

2011年(2)

2010年(10)

2009年(16)

2008年(33)

2007年(146)

2006年(160)

2005年(1)

分类:

2006-10-23 22:39:22

先插播一段天气情况,由于上周末的那场细雨,或许本质还是因为来于西伯利亚的寒流,终于导致了今天的气温低下,虽然穿了秋衣,可还是很冷,北方的春秋还真的是很短的!
今天还是农历上的“霜降”,现在的农民还都是一直遵从老祖宗遗留下来的农历也就是月亮历来进行着农业生产的作息,其中的“二十四节气”一直在发挥着它的指导性作用。可随着全球气温的普遍升高,节气也在发生着微妙的变化,感叹我们人类的“伟大”!
步入正题:
前文中我介绍了XMLRPC并用几种语言分别的实现了其服务器和客户端。我们发现如果在同一台服务器上也用XMLRPC进行调用的话,那么一个请求可能导致两次对服务器的访问,虽然其中一次是在本机调用本机,但是效率应该还是不会高的,所以我们不妨走得更远一些,为什么不把调用的任务放到客户的浏览器来做呢?带着这个问题,我又开始搜寻比较好的Javascript实现的XMLRPC库,结果不是很满意,似乎都不是很完整。无奈之下,就充分发挥“自己动手,丰衣足食”的号召,在实现的的基础上写了一个简单的实现,详见附件。
下面我们就用她来实现一下上文中提到过的那个加法XMLRPC的客户端吧。
File:xmlrpc_client1.html
"">


xmlrpc add sample in javascript





       
        +
       
       
       


上面的代码是不是已经简单到了不用解释的地步呢?没错,就是这么简单!
在所谓的Web 2.0中,Ajax技术似乎相当走俏,以致很多web开发人员趋之若鹜。那么Ajax到底是个什么样的技术呢?Ajax实际上是Asynchronous JavaScript and XML的缩写,翻译成中文比较直白“异步的JavaScript和XML”,听起来似乎没有Ajax更加专业化,更加唬人。JavaScript和XML我想大家都比较熟悉了,异步也就是平常所说的“回调机制”了,似乎都不能算是什么新技术,难道这些东西揉合在一起就算了么?很不幸的告诉你,虽然有人把这叫“老瓶盛新酒”,但这确实就是“创新”。很难想象在几年前由于浏览器的兼容性问题而被人所鄙夷的Javascript和DOM能在几年后的今天被捧的如此大红大紫,以致浏览器的厂商不得不重新考虑Javascript的定位和Web标准的支持问题。人们对于浏览器的理解也在产生着本质的变革,浏览器已经不再是以前的那个只能请求和显示页面的查看器,而是一个实实在在的“操作系统”,一个由XML/HTML表示数据,CSS控制页面显示,JavaScript进行行为处理的完备的开发环境,可想在不久的将来一个Web应用大行其道的时代将会带来,由此可见Web 2.0不仅仅是炒作,看看Google帝国的基于Web浏览器的Office系统的宏伟计划,你难道真的没有一点儿想法么?
似乎扯地远了点儿,不过请看,上面的代码中是不是用了XML和JavaScritp?如果再加入异步,是不是就显得很Ajax了呢?下面就请看如何发起异步的XMLRPC请求吧!
因为只有JavaScript部分发生了变化,所以只附上JavaScript代码:
function ack(req)
{
        var resp = new XMLRPCResponse(req);

        if (resp.faultCode()) {
                alert("Error:\n"
                                + "faultCode:" + resp.faultCode() + "\n"
                                + "faultString:" + resp.faultString());
                return;
        }
        document.getElementById("sum").value = resp.value().toString();
}

function callback(req)
{
        if (req.readyState == 4) {
                ack(req);
        }
}

function add()
{
        var uri = "~xiaosuo/xmlrpc/xmlrpc_server.php";
        var msg = new XMLRPCMessage("add", Array(
                                parseInt(document.getElementById("var1").value),
                                parseInt(document.getElementById("var2").value)));
        var client = new XMLRPCClient(uri);

        try {
                var req = client.send(msg.xml(), true, callback);
        } catch (x) {
                alert(x);
        }
}
以上代码也不复杂,恕不分析!就是少了些错误审查,作为实例来说,已经足够了。
用这个库来发起XMLRPC调用有几点注意事项:
  1. 基于安全的原因,大多数浏览器的XMLHTTPRequest对象不允许打开非当前域名下的页面,所以本库也不支持对非当前域名下的XMLRPC进行调用。
  2. 由于JavaScript的Number类中并没有区分float和integer,此库也只是简单的通过把原数和取整后的数进行比较来判断是否是浮点型的,所以可能出现误判,比如说1.0被判为整形。所以应尽量避免用浮点数作为参数。
  3. 因为Base64类型也非JavaScript原生类型,所以此库亦不支持,见谅!
  4. 如果用作参数或返回值的字符串中有和XML冲突的字符,比如“<>"等,请自行做编码和解码的动作,本库不做任何隐含的转换。
以上代码皆在Firefox,IE和Konqueror的最新版中测试通过,仅此而已!

文件:xmlrpc.js.tar.bz2
大小:2KB
下载:下载

阅读(2417) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~