#ruby-on-rails #ajax #json #forms #params
#ruby-on-rails #ajax #json #формы #параметры
Вопрос:
Пользователи моего сайта, заполните форму AJAX / JSON.
Разбивка
- я передаю объект json в outer space.
- чем сбой объекта в моем контроллере,
- затем мой контроллер загружает вторую часть.
- затем, когда я нажимаю и появляется отказ от ответственности,
- вторая часть исчезает.
я передаю объект json в outer space.
$.ajax({
url: foo_url,
data: dataString,
type: "POST",
dataType: 'json',
success: function(data) {
чем сбой объекта в моем контроллере
respond_to do |wants|
wants.json { render :json => {:errors => @card_signup.errors, :html => (render_to_string :partial => '/card_signups/new_form') } }
end
затем мой контроллер загружает вторую часть.
Это эффективно скрывает первую и помещает новую сверху. Понятия не имею, как и где это происходит в коде, это происходит просто потому, что контроллер вызывает его, я полагаю.
затем, когда я нажимаю и появляется отказ от ответственности
Когда появляется отказ от ответственности, новейшая форма полностью исчезает, оставляя старую непроверенную дерьмовую. Опять же, ни один код в системе не говорит об этом, это просто то, что делает приложение, когда оно загружает две формы и завершается сбоем.
нажмите отправить
Ошибка, он пытается зарегистрировать единственную форму (неудачную форму), и все приложение завершается с ошибкой.
БОЛЬШОЙ ВОПРОС:
Как я могу, по крайней мере, просто остановить рендеринг объекта дважды и просто сделать так, чтобы он обновлял форму. Это должно в значительной степени решить всю эту проблему.
В основном, вместо того, чтобы указывать ему снова отображать new_form, как мне сказать ему просто вернуть старую форму с ошибками в ней?
Комментарии:
1. почему вы хотите воссоздать форму? если вы используете ajax для отправки данных, форма все еще существует. Вы могли бы возвращать только соответствующие сообщения об ошибках и динамически выделять только неправильные поля ввода
2. @Vlad, это так странно, потому что дополнительные формы фактически пропадают. Таким образом, все, что создано после первого, исчезает. Не уверен, что произойдет с ним после нового рендеринга. Кроме того, то, что вы упоминаете, — это ответ, который я ищу, я просто не знаю, как реализовать эту идею. Можете ли вы указать мне направление?
Ответ №1:
Это помогло бы увидеть ваш код JavaScript, который отправляет форму и обрабатывает возвращаемые данные JSON.
Я в некоторой степени согласен с Владом в том, что вы не возвращаете весь HTML для формы, а скорее пишете некоторый код JavaScript для отображения сообщений об ошибках в существующей форме. На самом деле я бы так с этим справился, но если вы хотите свести JavaScript к минимуму, вы можете сделать что-то похожее на следующее:
На вашей странице это должно исходить из вашей части new_form:
<form id="my_form">
....
</form>
Ваш javascript для отправки формы и обработки обратных вызовов:
$.ajax({
url: foo_url,
data: dataString,
type: "POST",
dataType: 'json',
success: function(data) {
if (data.errors) {
$("#my_form").html(data.html); // replace old form
}
else {
// Everything was OK, so do something here. Perhaps reset the form?
}
}
});
Комментарии:
1. Мастер! Ошибок нет. Он публикует просто отлично, и система сообщает обо всех ошибках, но поскольку запрос AJAX, по крайней мере, прошел, он считается «проходящим».
2. Хорошо, это сработало. И я нашел скрытую часть jQuery, из-за которой остальной мой код казался мусорным ведром. Спасибо!
Ответ №2:
без дополнительного кода я не могу понять, почему ваши формы исчезают, но что касается моего комментария, то он идет. При отправке формы ajax отправьте данные на сервер для проверки. Если данные действительны, отправьте клиенту объект json со свойством status. Если данные неверны, отправьте клиенту тот же объект json со свойством status и другим свойством, которое будет содержать сообщения об ошибках. Это должно выглядеть так:
// validation ok
response = {status: 'ok'}
// validation errors
response = {status: 'error', msg: 'Invalid username<br />Invalid email addres...'}
На стороне клиента проверьте статус ответа. Если равно «ok», сделайте что-нибудь, иначе добавьте response.msg к любому элементу контейнера на вашей странице
Надеюсь, я ясно выразился. Удачи
Комментарии:
1. Да, это имеет смысл, я понимаю. Но на самом деле это не имеет никакого применимого смысла. Я застрял на .. как мне вообще получить доступ к этому объекту JSON. Кажется, он полностью исчезает.