打印

[翻译]用Rails实践JSON-P的输出

本帖已经被作者加入个人空间

[翻译]用Rails实践JSON-P的输出

用Rails实践JSON-P的输出
引用:
原文标题:JSON-P output with Rails
原文作者:Tim Lucas
原文地址:http://www.sitepoint.com/blogs/2 ... -output-with-php?name=rails" onclick="tagshow(event)" class="t_tag">rails/

译者:Ragnarok@Ruby中文社区翻译团队
译文首发:http://www.ruby-lang.org.cn/foru ... e%3D1&frombbs=1

转载请保留本版权信息,违者必究!
最近的Web Directions 06 会议上,Cameron Adam和Sitepoint网站的Kevin Yank在Mashups和APIs的演讲中,提到了JSON-P。

JSON-P是一个包装了允许别的开发者在他们的页面里绕过浏览器的安全机制来调用你的JSON输出API的方法。

如果看一下Web Connections这个网站的HTML源码,你会发现里面使用了JSON-P来映射JS数据。在调用JSON-P里的URL我们可以指定variablecallback参数,或者同时指定二个,这就使别人可以在他们自己的mashups中使用我们的JSON。

JSON-P也很好地整合了新的Rails REST功能,如Jeremy Keith’s profile page(译者注:”http://connections.webdirections.org/people/37“)在JSON格式中可以输出为plugging ‘.js’ on the end(译者注:“http://connections.webdirections.org/people/37.js”)
以‘.js’为结束的格式,这虽然好,但是如果你想从别的页面里调用就没有什么作用。

话说Jeremy想mashup一个数据到他的网站然后展示出谁是他的朋友,他需要JSON-P的某种输出,以便从script标签中访问的数据。

为了增加JSON-P“Padding”,就正好指定一个“Variable”参数,这个参数是用来声明你要分配给Javascript变量的名字。在这个例子中我们将指定‘'variable = personJSON’。.注意到输出中的分别没有? 现在试着指定callback,或者callbackvariable两个参数。

这在后台是怎么实现的呢?在应用程序中我有一个功能助手(Helper Function)来输出JSON:

	class ApplicationController < ActionController::Base 
	  protected 
	    def render_json(json, options={}) 
	      callback, variable = params[:callback], params[:variable] 
	      response = begin 
	        if callback && variable 
	          "var #{variable} = #{json};\n#{callback}(#{variable});" 
	        elsif variable 
	          "var #{variable} = #{json};" 
	        elsif callback 
	          "#{callback}(#{json});" 
	        else 
	          json 
	        end 
	      end 
	      render({:content_type => :js, :text => response}.merge(options)) 
	    end 
	end  


然后我可以在我的 PeopleController#show 行为中相当简单地使用这段代码:

	class PeopleController < ApplicationController 
	  def show 
	    @person = Person.find(params[:id]) 
	    respond_to do |format| 
	      format.js { render_json @person.to_json } 
	    end 
	  end 
	end 


并且这就是所有为了——用Rails实践JSON-P的输出。

[ 本帖最后由 Ragnarok 于 2007-11-10 01:29 编辑 ]
本帖最近评分记录
  • maninred R币 +10 劳动奖励 2007-11-10 11:21
  • drive2me R币 +5 谢谢好文章的介绍和翻译。 2007-11-10 09:09

TOP

感谢Drive2me的校对和教导!神会保佑你的!

TOP

引用:
原帖由 Ragnarok 于 2007-11-10 01:34 发表
感谢Drive2me的校对和教导!神会保佑你的!
你很聪明的,只要努力,就会成功的。继续加油!
记住要及时总结,才能不断提高。
Flying Piggy...! 
天地人合一!

TOP

2008-11-22 17:47 Crawled by CCBot/1.0 (+http://www.commoncrawl.org/bot.html) @38.103.63.61