阅读更多

19顶
11踩

Web前端

AJAXPRC是快速、简单的Javascript远程方法调用。它允许你使用Javascript调用服务端方法,基于JSON数据协议,开源授权(LGPL),可同步和异步调用。

使用AJAXRPC,您可以像开发传统的C/S程序一样,来开发WEB程序,让WEB开发更简单和高效。

支持服务端语言:Java、.Net、PHP。
支持浏览器:IE、FireFox、Opera、Safari、Chrome。

最新版本: 1.0
最近更新: 2010-10-10

使用AJAXRPC

首先,我们在服务端定义了一个类和静态方法:

public class Test {
	public static String sayHello(String name){
		return "hello, " + name;
	}
}

注意:必须是公开的静态方法。

然后,我们使用AJAXRPC客户端,对服务端的方法进行调用。

注意:在调用RPC方法时,如果没有传递回调函数,则是同步调用;如果传递回调函数,则是异步调用。

同步调用

<script type="text/javascript">
......
try{
    var obj = Test.sayHello('world!');
    ......
}catch(e){
    //e.error 错误码
    //e.message 错误描述
}
......
</script>

不传递回调函数,以try…catch来处理错误。在同步调用模式下,如果有网络错误、业务逻辑错误等,会抛出一个异常。

异步调用

<script type="text/javascript">
......
Test.sayHello('world!',
    function(obj){          //success callback function
        ......
    },
    function(error, message){    //fail callback function
    }

);
......
</script>

传递回调函数作为参数。如果只有一个回调函数, 则默认是成功的回调函数。

当我们通过Javascript调用服务端方法时,会传递一些参数,这些参数有一个约定的类型转换,如下表。

数据类型映射表

AJAXRPC支持基本数据类型、自定义类,不支持泛型。

Javascript Java .Net Php 说明
Number Short,short
Integer,int
Long,long
Float,float
Double,double
short,Int16
int,Int32
long,Int64
float
Double,double
Integer
Float
Double
数字类型之间没有严格的界限,可以任意转换
Boolean Boolean,boolean Boolean,bool Boolean  
String String String,string String  
Date Date DateTime String 日期字符串”Y-m-d\TH:i:s“格式,php需要额外处理
Object HashMap,Map Hashtable,IDictionary Object  
Array ArrayList,List ArrayList,IList Array  
null null null NULL  


AJAXRPC是一个基于JSON数据协议的AJAX环境的RPC项目, 优点是体积小, 实现简单, 使用方便, 能支持java\.net\php平台, 而且是基于LGPL开源协议的, 可以比较方便应用到项目中.

 

项目网站: http://ajaxrpc.com
中文翻译地址: http://ajaxrpc.com/cn/index.html

 

来自: ajaxrpc
19
11
评论 共 53 条 请登录后发表评论
33 楼 kimmking 2010-10-11 21:34
zm9913 写道
支持,先不管对你的用处有多大,人家起码能把思路提供给大家,这就要鼓励!


我又没说不鼓励,
大概看了看文档,觉得如果剑走偏锋,走轻而小的路线,
使用还是太麻烦了,有时间我简化简化。
32 楼 littleJava 2010-10-11 21:25
JsonRPC和这个比有什么区别呢?
31 楼 zm9913 2010-10-11 20:23
支持,先不管对你的用处有多大,人家起码能把思路提供给大家,这就要鼓励!
30 楼 fcrong 2010-10-11 20:18
to: 28 楼 kimmking

当你用ajax调用服务端逻辑的时候, 这个逻辑是变化的? 是多太的? 是可继承的?

29 楼 kimmking 2010-10-11 19:15
easonfans 写道
DWR^^^^翻版……

简化版。

大概:
服务器端:反射类型和静态方法,常用类型的converter,reserialize组装bean,(两部可以合成json库来做),
调用方法,返回数据在serialize成json,加上异常处理,返回给客户端。

客户端:一个ajax库和一些工具方法

很简单的东西。
28 楼 kimmking 2010-10-11 19:11
fcrong 写道
kimmking 写道
静态方法,这个是为了:
1、不需要配置,组装和维护bean的实例

缺点就太多了:
1、大部分service方法,明显都不是static的
2、配置可访问的bean和方法列表
3、自定义转换关系和映射类型
等等。。。


总之,这是个鸡肋工具。


如果要支持实例方法, 会有N多的配置等着你~
使用AJAXRPC为了什么?
是为了发布服务端的业务逻辑给客户端!
如果是纯AJAX+JSON处理, 你会有非常多的细节要处理;使用AJAXRPC, 只需要在服务端写一个类和静态方法, 就可以发布到客户端, 由javascript进行调用~
这个就是AJAXRPC的意义和价值所在~


配置不一定是坏事。
业务都静态了,才是问题。
27 楼 Evin7 2010-10-11 18:25
不是有了DWR的吗?DWR做的挺好的啊,为什么要用这个AJAXRPC,而不是DWR,对比优势在哪里?
26 楼 djb_daydayup 2010-10-11 17:32
有这些功夫,还不如好好研究下dwr,把它做的更好
25 楼 liupesnap 2010-10-11 16:57
整个一flex blazeds翻版
24 楼 easonfans 2010-10-11 16:39
DWR^^^^翻版……
23 楼 fcrong 2010-10-11 15:55
kimmking 写道
静态方法,这个是为了:
1、不需要配置,组装和维护bean的实例

缺点就太多了:
1、大部分service方法,明显都不是static的
2、配置可访问的bean和方法列表
3、自定义转换关系和映射类型
等等。。。


总之,这是个鸡肋工具。


如果要支持实例方法, 会有N多的配置等着你~
使用AJAXRPC为了什么?
是为了发布服务端的业务逻辑给客户端!
如果是纯AJAX+JSON处理, 你会有非常多的细节要处理;
使用AJAXRPC, 只需要在服务端写一个类和静态方法, 就可以发布到客户端, 由javascript进行调用~
这个就是AJAXRPC的意义和价值所在~
22 楼 t42dw 2010-10-11 15:14
如果对ajax效果要求不是太高使用AjaxAnywhere还是蛮不错的,开发简单
21 楼 kimmking 2010-10-11 14:10
静态方法,这个是为了:
1、不需要配置,组装和维护bean的实例

缺点就太多了:
1、大部分service方法,明显都不是static的
2、配置可访问的bean和方法列表
3、自定义转换关系和映射类型
等等。。。


总之,这是个鸡肋工具。
20 楼 antjava 2010-10-11 14:06
dhtmlxajax 很好用,觉得这个调用有些麻烦。
19 楼 longware 2010-10-11 13:51
dieslrae 写道
必须要静态方法,太恶心了

18 楼 fcrong 2010-10-11 13:14
LeisureDev 写道
想起了当年在用flex-blazeds-remoting技术,不过效率上?


AJAXRPC是基于JSON的数据协议, 跟你用AJAX+JSON的原始写法其实是一样的效率, 只是做了一点封装, 实现代码就几百行, 非常简单, 容易掌握.

AJAXRPC不准备成为一个庞大的类库, 而是一个精简好用的小工具.
17 楼 fcrong 2010-10-11 13:10
如果你用一下, 就知道AJAXRPC的好了
纯手工的AJAX+JSON, 会处理相当多的技术细节
可以对比下开发效率
16 楼 LeisureDev 2010-10-11 13:09
想起了当年在用flex-blazeds-remoting技术,不过效率上?
15 楼 mr_kairy 2010-10-11 12:07
确实不爽..这样用..
不如自己返回JSON 的封装过程来的靠谱
14 楼 aninfeel 2010-10-11 10:01
静态的,太恶心,况且以俺的js水平,有必要用它吗?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • GBase8s数据库CLOSE DATABASE 语句

    使用 CLOSE DATABASE 语句关闭当前数据库的隐式连接。该语句是 SQL ANSI/ISO 标准的扩展。 用法 当发出 CLOSE DATABASE 语句时,紧接其后您仅能发出以下 SQL 语句: ⚫CONNECT ⚫CREATE DATABASE ⚫DATABASE ⚫DROP DATABASE ⚫DISCONNECT (这里,只有在执行 CLOSE DATABASE 之前存在显式连接的情况下,DISCONNECT 语句才有效。) 在删除当前数据库之前发出 CLOSE DATABASE 语句。

  • “无法删除数据库,因为该数据库当前正在使用“问题解决

    "无法删除数据库,因为该数据库当前正在使用"问题解决

  • 无法删除数据库

    原文链接:http://blog.sina.com.cn/s/blog_62596ff60101ro8n.html删除数据库的方法有两种:1.在左边的列表中找到要删除的那一个数据库,右键,删除,这里要注意的是:上图中黄色方框区域内,都要勾上,否则当前数据库被占用,不能关闭。2.在新建查询中编写删除数据库(模式)的代码,按照书本上的例子 DROP SCHEMA(或DATABASE) ZHANG CA...

  • 【问题】“无法删除数据库,因为该数据库当前正在使用“问题解决

    "无法删除数据库,因为该数据库当前正在使用"问题解决 use master go declare @dbname sysname set @dbname = 'BigValuesTest' --这个是要删除的数据库库名 declare @s nvarchar(1000) declare tb cursor local for select s = 'kill ' + cast(spid as varchar) from

  • SQL Server无法删除数据库,因为该数据库当前正在使用的解决办法

    SQL Server无法删除数据库 “score”,因为该数据库当前正在使用的解决办法问题描述今天在SQL Server删除一个数据库的时候报错,内容如下: 消息 3702,级别 16 无法删除数据库 “score”,因为该数据库当前正在使用。 我的SQL原语句是这样的drop database score;上网搜了一下,找到了解决办法,也在这里记录一下。 解决方法一般我们删除数据库的语

  • "无法删除数据库,因为该数据库当前正在使用"问题解决

    原文:点击打开链接 USE MASTER GO DECLARE @dbname SYSNAME SET @dbname = 'databasename' --这个是要删除的数据库库名 DECLARE @s NVARCHAR(1000) DECLARE tb CURSOR LOCAL FOR SELECT s = 'kill ' + CAS

  • sqlserver"无法删除数据库,因为该数据库当前正在使用"问题解决

    <br /> <br />执行脚本:<br />use   master  <br />  go  <br />   <br />  declare   @dbname   sysname  <br />  set   @dbname='databasename' --这个是要删除的数据库库名  <br />   <br />  declare   @s   nvarchar(1000)  <br />  declare   tb   cursor   local   for  <br />  select

  • mysql删除数据库失败17_"无法删除数据库,因为该数据库当前正在使用"问题解决...

    以前刚学数据库的时候比较苦恼这个问题,今天删除的时候又看见了,正好一起记录一下:图形化方法:命令行方法:use mastergodeclare @dbname sysnameset @dbname = 'BigValuesTest' --这个是要删除的数据库库名declare @s nvarchar(1000)declare tb cursor localforselect s = 'kill ...

  • 无法删除数据库,因为该数据库正在使用

    删除数据库操作的时候,删除失败并且抛出异常, “无法删除数据库xxx, 因为该数据库当前正在使用!” 下方SQL总databasename为需要删除的数据库库名 。 USE MASTER GO DECLARE @dbname SYSNAME SET @dbname = 'databasename' DECLARE @s NVARCHAR...

  • SQL无法删除数据库解决方法。

    消息 3702,级别 16 无法删除数据库 “Sale_Management_Subsystem”,因为该数据库当前正在使用。 我们一般课本上学到的都是直接使用下面的代码 Drop database Sale_Management_Subsystem 如果使用master 数据库就能删掉了 USE MASTER GO DROP DATABASE Sale_Management_Subsystem ...

  • sqlserver “无法删除数据库,因为该数据库当前正在使用“问题解决【引用‘博客园’毒逆天的文章】

    图形化方法:命令行方法:123456789101112131415161718192021222324use mastergodeclare@dbname sysnameset@dbname ='BigValuesTest'--这个是要删除的数据库库名declare@s nvarchar(1000)declaretbcursorl...

  • postgresql 无法删除数据库的解决方法

    1.先查看是哪些进程在引用 (******表示你的数据库名) ps -ef | grep ****** | grep -v grep   2.然后kill掉这些进程   3.dropdb ******

  • SQL Server无法删除数据库 "xxx",因为该数据库当前正在使用(如何删除一个Sql Server数据库)

    1.一般情况下删除一个Sql Server数据库: 新建查询→输入“drop database xxx(xxx为数据库名)”→执行。 但有时会报错:无法删除数据库 &quot;lib&quot;,因为该数据库当前正在使用。 2.解决办法 USE master GO drop database xxx; 执行如上代码,代码的意思就是使用master数据库,那么我们要删除的数据库就不会说正在使用了,删除语...

  • mysql数据库删不掉_win7系统删除MYSQL数据库提示操作无法完成的解决方法

    很多小伙伴都遇到过win7系统删除MYSQL数据库提示操作无法完成的困惑吧,一些朋友看过网上零散的win7系统删除MYSQL数据库提示操作无法完成的处理方法,并没有完完全全明白win7系统删除MYSQL数据库提示操作无法完成是如何解决的,今天小编准备了简单的解决办法,只需要按照1、数据库删除不了,要先看一下是否打开了该数据库的文件夹,如果打开了,要先关闭该数据库的文件夹; 2、如果不是文件夹的原因...

  • DataStage开发规范

      DataStage开发规范1.1.    简介本文档对采用DataStage工具开发ETL程序的命名及代码编写进行规范性描述。1.2.    命名规范ETL的类别说明 etltype 说明

  • 增加一个判断内存变量存在的函数

       笔者在开发应用系统中曾经用FoxPro的on error语句编写了一个判断内存变量的函数Exist(),非常方便实用,在此介绍给大家。  设计思路:先假设内存变量存在,然后将待判断的内存变量赋值给一个临时变量,若该内存变量不存在,则执行时必将出错,出错时将执行on error语句,只要在on error处理的函数中修改内存变量存在与否的标志即可。为了不影响调用程序的错误处理,保证该函数的

Global site tag (gtag.js) - Google Analytics