Rails中的Ajax初体验

之前在网上大概看了一下Ajax的内容,大概了解了它主要是使用XMLHttpRequest对象使得javascript客户端脚本与服务器端进行交互的技术。这种技术的应用如今在互联网上已经是遍地开花了,人们也在应用它的过程中对其继续进行着研究和探讨。而我对Ajax的实践,是从Rails开始的。

 

Rails中集成了Ajax技术,故不需要开发人员自己创建XMLHttpRequest对象、自己写各种复杂的函数,而是通过调用Rails中集成的Ajax机制,方便地实现各种效果。Rails中使用Ajax的话,目前主要是通过三种方式(以后说不定还会出现更多):PrototypeScript.aculo.us,以及RJS。实际上,后两者都是基于Prototype库的,都要在页面中包含Prototype.js文件(该文件在Rails项目的public/javascripts目录下)。至于这三者具体都是什么东西,不是这里要讲的,网上随处可以找到资料。

 

我只针对PrototypeRJS做了实践——Prototype作为背景基础,RJS作为打算在项目中应用的技术。具体如下:

 

1、分别针对PrototypeRJS创建两个控制器:prototype_controllerrjs_controller,两个控制器中均有一个空的action,均取名为index,以作为页面的指引action

 

2、分别为两个控制器建立相应的视图,即views目录下的prototyperjs两个目录。两个目录下均建立两个视图模板:index.rhtml_index.rhtml,后者为前者使用的局部模板。要在Rails中使用Ajax,局部模板是必须的。

 

3、在两个视图的index.rhtml<head>段中,均添加对prototype库的包含:

 

 

4、在两个视图的index.rhtml<body>段中,添加一个idreturn_valuediv,其中分别渲染各自的局部模板_index.rhtml,然后加一个换行:

 

  

5、接下来,在两个视图的index.rhtml<body>段中,继续分别添加各自的链接。

Prototype中的为:

  

RJS中的为:

 

 

可以看到,二者除了链接显示的内容以及调用的action不同之外,还有一个值得注意的区别:Prototype版的带有“:update=>"return_value"”,而RJS版的没有。这个区别的影响后面再说。

 

6、两个视图要使用的局部模板都很简单,只有一句:<%=@return_value || "hello world"%>。这句的含义是:看看@return_value变量是否为空,若不为空,则显示其值,若为空,则显示“hello world”。

 

7、下面就该分别为两个链接要调用的actionprototype_ajaxrjs_ajax)填写内容了。分别在prototype的控制器和RJS的控制器中添加名为prototype_ajaxrjs_ajaxaction。代码如下:

 

 

 

 

二者的大意相同,都是先取到传入的参数my_name的值,然后组合成一个字符串,保存在@return_value中,供视图使用,只是实现方式不同。

 

至此,两种版本的两个非常简单的Ajax页面就做好了。两种版本在打开初始页面时均显示Hello world,不同的是Prototype版的链接叫Prototype Ajax TestRJS版的链接叫RJS Ajax Test。点击Prototype Ajax Test,则Hello world变成了“Prototype Ajax welcomes sizheng!”;点击RJS Ajax Test,则Hello world变成了“RJS Ajax welcomes sizheng!

 

最后,说一下第5步中的那个问题:如果RJS版的链接中也加上“:update=>"return_value"”,则点击RJS版的链接时,“Hello world”不会变成预期的字符串,而是变成了页面中实际生成的那段Ajaxjavascript代码:try { Element.update("return_value", "/n/nRJS Ajax welcomes sizheng!/n"); } catch (e) { alert('RJS error:/n/n' + e.toString()); alert('Element.update(/"return_value/", /"//n//nRJS Ajax welcomes sizheng!//n/");'); throw e }

 

这样,算是踏入Ajax殿堂第一步了。当然,在今后对其实践和应用中,还有许多东西需要学习和考虑。

 

PS:上面我分成两个完全独立的控制器来做,当然也可以做在一个里面,在一个视图中分别为两个版本做两个链接,调用不同的action。不再赘述。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值