Обновление различных div из AJAX в зависимости от ошибок валидации

StackOverflow https://stackoverflow.com/questions/301435

  •  08-07-2019
  •  | 
  •  

Вопрос

У меня есть форма, которую я отправляю через AJAX (используя прототип и встроенный помощник rails 'form_remote_tag').
Я хотел бы обновить один div (область состояния), если есть ошибки проверки формы, но другой div (div, в котором находится форма), если отправка прошла успешно.

Мой код выглядит примерно так:

<div id="recipe-status"><!-- I want form validation errors to go here --></div>
<div id="recipe">
    <%= form_remote_tag(:update => "recipe-status",
       :before => "Element.show('wait-indicator')",
       :success => "Element.hide('wait-indicator')",
       :complete => visual_effect(:appear, "recipe-status"),
       :url => { :action => 'import', :id => @recipe.id },
        :failure => "alert('Unable to import recipes at present')") %>
    <-- Form goes here, I want this to be replaced if the submit succeeds -->
</div>

Единственный способ, которым я могу думать об этом, - вернуть статус ошибки HTTP, если есть ошибка проверки, но это похоже на хак. Есть ли более чистый способ сделать это вообще?

Это было полезно?

Решение

Я бы хотел проверить последние Railscasts на jQuery , а также более старый эпизод на шаблонах RJS . Это должно помочь вам хорошо работать с AJAX и вашим Rails-приложением и заставить все работать правильно и без каких-либо проблем.

Посмотрев на ваш код, я бы предложил использовать jQuery (см. эпизод выше), и вы извлечете весь javascript из своей формы. делает его намного менее навязчивым (что очень хорошо).

Похоже, вы освоили методы, поэтому вы быстро начнете писать ненавязчивый Javascript с помощью jQuery и, скорее всего, станете гораздо более счастливым человеком с гораздо более чистым приложением. :)

Удачи!

Другие советы

Я бы порекомендовал, как отмечалось в другом ответе, посмотреть на использование jQuery. Однако это наверняка потребует некоторого ускорения, поэтому придерживайтесь Rails по умолчанию, чтобы вы могли быстрее двигаться вперед ...

Что вы хотите посмотреть, так это встроенный RJS. Вместо того, чтобы делать все в вызове form_remote_tag, вы можете делать обновления AJAX из своего контроллера. Таким образом, вы можете управлять логикой наличия ошибок валидации и выполнять то или иное обновление AJAX (в зависимости от того, какой div) в зависимости от этого.

Смотрите этот пост Джамиса Бака для начинающих.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top