Как правильно создать новый XMLHttpRequest из ответа RJS в Ruby on Rails? - PullRequest
0 голосов
/ 01 апреля 2010

Я пытаюсь приблизиться к решению проблемы моего предыдущего вопроса.

Схема, которую я хотел бы попробовать, следующая:

  1. Пользователь запрашивает действие у контроллера RoR.
  2. Действие выполняет некоторые запросы к базе данных, производит некоторые вычисления, устанавливает некоторые переменные сеанса и возвращает некоторый код RJS в качестве ответа. Этот код может либо
    • обновить индикатор выполнения и сделать еще один AJAX-запрос.
    • отображать окончательный результат (например, график графика), если вся обработка завершена
  3. Браузер оценивает представление RJS в javascript. Он может сделать другой (рекурсивный? Допустима ли рекурсия?) Запрос или просто отобразить результат для пользователя.

Итак, мой вопрос на этот раз таков: как мне правильно встроить вызов XMLHttpRequest в код rjs?

Вот некоторые вещи, которые я хотел бы знать:

Должен ли я создать новый поток, чтобы избежать переполнения стека. Каких помощников по рельсам (если есть) я должен использовать?

Кто-нибудь когда-нибудь делал что-то подобное на Rails или с другими фреймворками?

Является ли моя идея вменяемой?

1 Ответ

0 голосов
/ 01 апреля 2010

В наши дни, возможно, вам будет сложнее получить информацию о RJS, я думаю, что ненавязчивый JavaScript получил больше внимания в сообществе Rails.То, что вы описываете, безусловно, возможно.Я предлагаю потратить немного времени на изучение AJAX с помощью jQuery.Вот некоторые шаги, которые вы можете предпринять: 1) сделать GET-запрос к действию контроллера, 2) сделать что-то, ответить JSON, 3) на стороне клиента кода успешного обработчика, определить, нужно ли вам снова вызывать сервер.

Проверьте Railscast на jQuery, вот транскрипция http://asciicasts.com/episodes/136-jquery

jQuery $ .get () или $ .getJSON http://api.jquery.com/jQuery.get/

Rails 'respond_to, проверьтекод "want.js" здесь http://www.mckinneystation.com/2009/07/13/rails-respond_to-made-it-too-easy/

Вы можете ответить с помощью вашего объекта Ruby, сериализованного как JSON: render :json => @thing.to_json

Использование $.getJSON() приведет к десериализации ответа в объект JavaScript,так что вы легко получаете доступ к свойствам с помощью синтаксиса точки.Например, (псевдокод): $.getJSON('/url-to-thing.js', function(thing) { if( thing.status != 'done' ) { /* call function again */ } });

Таким образом, функция перестает вызываться, когда «вещь» завершена.Изначально освоиться с обязанностями клиентской и серверной частей может быть сложно, но в конечном итоге это окупится, позволив вам разрабатывать гораздо более динамичные и интерактивные веб-приложения.

...