![](/img/trans.png)
[英]How to make an AJAX call to different domains in Ruby on Rails 3.0
[英]How to generate a Javascript AJAX POST method and handle it in Ruby on Rails 3.0
我想做一些很简单的事情。 单击我的html javascript页面上的按钮,该按钮使用AJAX Post方法将一堆数据发送到服务器。 服务器使用POST方法发送的数据来生成xml文件,然后将其发送回用户,以便他们保存。
我对Rails上的ruby的了解非常有限,我看过教程,但是它们似乎都不能简单地解释如何处理POST请求。 我不需要在HTML页面本身上进行任何修改,因此整个html页面是静态的,发送数据部分如下所示:
//data is a huge string already xml > 1mb
xmlhttp=new XMLHttpRequest();
xmlhttp.open('POST', "http://localhost:3000/xmlsave", true);
xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
xmlhttp.send(data);
在rails 3.0中,我将/ xmlsave路由到我制作的控制器中的某个动作:
class MyController < ApplicationController
def xmlsave
#Read data sent with POST and put it in generated xml file and send to user
end
end
如果我什至正确地做到了这一点,任何人都可以向我解释或将正确的方向指向我需要在xmlsave方法下输入的内容:
如果我要做的事情完全是离奇的,或者我有完全错误的想法,我深表歉意。 我阅读的大多数教程都朝着创建部分的方向发展,该部分用于编辑用户已经在查看的html页面的部分,而我不想这样做。 我阅读的所有教程似乎都没有确切解释请求去向,数据去向,应该在哪里调用函数等,这让我感到困惑。
谢谢。
我认为您不应该为此使用AJAX,因为您希望用户获得XML作为响应并能够保存它。 它应该作为表单提交按钮或链接。 该表单会将带有XML的POST请求(我假设XML已经在文档中的某个位置?)发送到xmlsave
方法。
通常,这会将响应呈现为application/xml
,浏览器可能会显示内容(默认配置)。 为了避免这种情况,您可以将内容类型设置为application/octet-stream
这样浏览器将提示您保存文件,并且不会刷新页面(因此不需要AJAX)。
要将传入的XML片段“剪切/粘贴”到结果中,您可能必须解析传入的数据,然后将生成的DOM模型或其片段传递到新XML的模板中。 您可以使用hpricot或nokogiri进行解析,然后呈现xmlsave.xml.erb
。
这是一个大概的思路:
xmlsave.html.erb:
<%= form_tag xmlsave_models_path(:format => :xml) do %>
<%= hidden_field_tag :data, '<input><justatest id="tagid">test content</justatest></input>'%>
<%= submit_tag %>
<% end %>
model_controller.rb:
def xmlsave
input = Hpricot.XML(params[:data])
respond_to do |format|
format.html
format.xml {render :content_type => 'application/octet-stream', :locals => { :input => input } }
end
end
xmlsave.xml.erb:
<myxml>
<input>
<%= (input/"#tagid").inner_text %>
</input>
</myxml>
注意:此代码使用Rails 3模板
我认为最好使用jQuery之类的Javascript库。 在您可以轻松完成Ajax请求之后
您实际上并不需要Ajax来做到这一点。 一个简单的链接就足够了。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.