Как сгенерировать Javascript-метод AJAX POST и обработать его в Ruby on Rails 3.0 - PullRequest
0 голосов
/ 19 октября 2010

Я хочу сделать что-то довольно простое. Нажмите кнопку на моей html-странице javascript, которая отправляет данные на сервер с помощью метода AJAX Post. Сервер использует данные, отправленные методом POST, для создания XML-файла, который он затем отправляет обратно пользователю, чтобы они могли его сохранить.

Мои знания 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-страницы, которую пользователь уже просматривает, а я этого не хочу. Кажется, что ни одно из учебных пособий, которые я читаю, не объясняет точно, куда отправляются запросы, куда направляются данные и куда я должен вызывать функции и т. Д.

Спасибо.

Ответы [ 2 ]

1 голос
/ 19 октября 2010

Я думаю, вам не следует использовать AJAX для этого, поскольку вы хотите, чтобы пользователь получил XML-ответ и смог его сохранить. Он должен работать как кнопка отправки формы или ссылка. Форма отправит запрос POST с XML (я предполагаю, что 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

0 голосов
/ 19 октября 2010

Я думаю, что лучше использовать библиотеку Javascript, такую ​​как jQuery. после того, как вы можете сделать ваш запрос Ajax легче

Тебе не нужен Ajax для этого. достаточно простой ссылки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...