簡體   English   中英

如何在Ruby on Rails 3.0中生成Javascript AJAX POST方法並進行處理

[英]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方法下輸入的內容:

  1. 讀取通過AJAX POST發送的數據
  2. 從已經是xml的數據字符串生成xml文件。只想復制粘貼到我想發回的xml文件的內容中
  3. 將xml文件發送給用戶(send_file?)

如果我要做的事情完全是離奇的,或者我有完全錯誤的想法,我深表歉意。 我閱讀的大多數教程都朝着創建部分的方向發展,該部分用於編輯用戶已經在查看的html頁面的部分,而我不想這樣做。 我閱讀的所有教程似乎都沒有確切解釋請求去向,數據去向,應該在哪里調用函數等,這讓我感到困惑。

謝謝。

我認為您不應該為此使用AJAX,因為您希望用戶獲得XML作為響應並能夠保存它。 它應該作為表單提交按鈕或鏈接。 該表單會將帶有XML的POST請求(我假設XML已經在文檔中的某個位置?)發送到xmlsave方法。

通常,這會將響應呈現為application/xml ,瀏覽器可能會顯示內容(默認配置)。 為了避免這種情況,您可以將內容類型設置為application/octet-stream這樣瀏覽器將提示您保存文件,並且不會刷新頁面(因此不需要AJAX)。

要將傳入的XML片段“剪切/粘貼”到結果中,您可能必須解析傳入的數據,然后將生成的DOM模型或其片段傳遞到新XML的模板中。 您可以使用hpricotnokogiri進行解析,然后呈現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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM