我想调用该方法并在我的应用程序中从Ruby on Rails技术中的另一个应用程序获取响应,但是这里存在跨站点脚本问题。所以,我可以解决这个问题,请帮助我,这将是伟大的。
http://video_tok.com/courses/get_course
def get_course
@course = Course.find(params[:id])
end
现在我想从这个在edupdu.com域
中运行的应用程序调用上面的方法http://edupdu.com/call_course_method
def call_course_method
@course = redirect_to "http://video_tak.com/courses/get_course/1"
end
但它会重定向到video_tak.com应用程序。 我想调用get_course方法并在内部获取@course对象,而无需重定向到另一个站点。
提前致谢。
答案 0 :(得分:3)
跨域AJAX确实是一个问题,但没有一个无法解决。在get_course
方法中,您可以将课程对象作为JSON响应返回,如下所示:
render json: @course
从那里开始,您可以通过JavaScript(AJAX)检索课程,在这里您应该通过发出HTTP GET请求来使用JSONP或Rails内部。
使用JSONP的AJAX
有JSONP(带填充的JSON),这是一种JavaScript程序的通信技术,用于提供从不同域中的服务器请求数据的方法。看着 jQuery.getJSON()的文档并向下滚动到JSONP部分。
如果URL包含字符串
"callback=?"
(或类似的,由...定义) 在服务器端API),请求被视为JSONP。见 有关详细信息,请参阅jsonp
中$.ajax()
数据类型的讨论。
HTTP GET请求
只需使用Net::HTTP
类:
require 'net/http'
require 'json'
url = URI.parse('http://video_tak.com/courses/get_course/1')
req = Net::HTTP::Get.new(url.to_s)
res = Net::HTTP.start(url.host, url.port) do |http|
http.request(req)
end
course_json = JSON.parse(res.body)
如果您为模型提供了将JSON转换为您的域对象的方法,则可以从那里获取它。
<强> RPC 强>
您也可以使用RPC来调用不同Ruby进程之间的方法,尽管我建议这一点至少我不想省略它。有几个远程过程调用(RPC)库。 Ruby标准库提供DRb,但也有基于Ruby on Rails的实现,例如rails-xmlrpc gem允许您基于XML-RPC协议或替代协议实现RPC将JSON与json-rpcj
一起使用在搜索 Rails RPC 时,您可能会发现更多的库。从您选择的任何库中,具体的解决方案都会有所不同。