Как я могу вернуть неподтвержденную форму AJAX / JSON для ее исправления? - PullRequest
0 голосов
/ 10 октября 2011

Пользователи моего сайта, заполняют форму AJAX / JSON.

Перерыв

  1. Я передаю объект JSON в космос.
  2. чем объект отказывает в моем контроллере,
  3. , затем мой контроллер загружает второй частичный элемент.
  4. затем, когда я нажимаю и появляется сообщение об отказе,
  5. второй частичный элемент исчезает.

я передаю объект json в космическое пространство.

            $.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

затем мой контроллер загружает вторую частичку.

Это эффективно скрывает первое и помещает более новое сверху.Понятия не имею, как или где это происходит в коде, это просто потому, что контроллер вызывает его, я полагаю.

затем, когда я нажимаю, и появляется сообщение об отказе

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

нажмите send

Blam, онопытается зарегистрировать единственную форму (ошибочную форму), и все приложение завершается неудачей.

БОЛЬШОЙ ВОПРОС:

Как я могу, по крайней мере, просто остановитьобъект от рендеринга дважды , и просто сделайте так, чтобы он обновлял форму.Это должно в значительной степени решить всю эту проблему.

По сути, вместо того, чтобы сказать ей, чтобы она снова отображала new_form, как мне сказать, чтобы она просто возвращала старую форму с ошибками в ней?

Ответы [ 2 ]

1 голос
/ 10 октября 2011

Это поможет увидеть ваш код 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 голос
/ 10 октября 2011

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

Надеюсь, я дал понять.Удачи

...