![](/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.