我想在我的应用程序中调用该方法并从另一个采用 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 对象而不重定向到另一个站点。
提前致谢。
最佳答案
跨域AJAX确实是个问题,但没有解决不了的问题。在您的 get_course
方法中,您可以将类(class)对象作为 JSON 响应返回,如下所示:
render json: @course
从那里您可以通过 JavaScript (AJAX) 检索类(class),在这里您应该使用 JSONP 或在 Rails 内部通过发出 HTTP GET 请求。
使用 JSONP 的 AJAX
有JSONP(JSON with padding),这是一种通信技术,为JavaScript程序提供一种向不同域的服务器请求数据的方法。看着 jQuery.getJSON() 的文档并向下滚动到 JSONP 部分。
If the URL includes the string
"callback=?"
(or similar, as defined by the server-side API), the request is treated as JSONP instead. See the discussion of thejsonp
data type in$.ajax()
for more details.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 在不同的 Ruby 进程之间调用方法,尽管我最不推荐这样做,但我不想忽略它。有几个远程过程调用 (RPC) 库。 Ruby 标准库提供 DRb , 但也有基于 Ruby on Rails 的实现,例如 rails-xmlrpc gem 允许你基于 XML-RPC 实现 RPC协议(protocol)或使用 JSON 和 json-rpcj 的替代协议(protocol)
在搜索 Rails RPC 时,您可能会找到更多的库。无论您选择哪种库,具体的解决方案都会有所不同。
关于ruby - 如何在 ruby on rails 中从另一个应用程序调用一个应用程序中的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18203352/