Как ответить на отправку формы AJAX в Rails? - PullRequest
0 голосов
/ 12 февраля 2012

Вот простая форма «Расскажи другу», которую я сделал в HTML, она корректно отправляет данные обратно на мой сервер и правильно отправляет.

Вот код JavaScript (он есть в CoffeeScript):

$('#tell-a-friend-form').submit (e) ->
    e.preventDefault()
    console.log "submitted form."

    $.ajax
      url: 'home/tellafriend'
      type: 'POST'  
      data:
        name: $(this).find("input[name='name']").val()
        emails: $(this).find("input[name='emails']").val()
        message: $(this).find("textarea[name='message']").val()
      success: (result) ->
        alert("ok")
        $('#tell-a-friend-form').find(".loading-icon").hide()
      error: (result) ->
        alert("Sorry, we couldn't send your message.")    
        $('#tell-a-friend-form').find(".loading-icon").hide()
        $('.tell-a-friend-submit').removeAttr("disabled")

    $(this).find(".tell-a-friend-submit").attr("disabled", "disabled")
    $(this).find(".loading-icon").show()

Теперь в контроллере мне вообще не нужно возвращать никаких сообщений, кроме, возможно, логического типа «sent ok», чтобы на стороне клиента javascript мог знать, «успешен» или «ошибочен».

В настоящее время на стороне клиента каждый раз выдается «ошибка».

Вот мой код контроллера:

def tellafriend
  #send the actual email message. to be implemented.

  respond_to do |format|
    format.json { render :json => "success" }
  end
end

Что-то не так на стороне контроллера?Я уверен, что проблема заключается здесь.Что мне нужно вернуть, если я хочу, чтобы бит «успеха» сработал?

1 Ответ

2 голосов
/ 13 февраля 2012

Что показывают ваши журналы, когда вы делаете запрос? Это важно для диагностики такого рода вещей. Я могу думать о трех вещах, которые обычно исправляют это:

Явный запрос JSON

Это может быть так же просто, как явный запрос JSON из вашего вызова AJAX:

$.ajax
  url: 'home/tellafriend'
  type: 'POST'
  dataType: 'json'
  ...

Проверьте свои маршруты:

Ваш маршрут может быть не настроен для ответа на запросы POST. Убедитесь, что ваш маршрут для tellafriend принимает сообщения. В качестве быстрой проверки вы можете изменить свой AJAX-запрос на «GET» или посмотреть /home/tellafriend.json

Вернуть действительный объект

Вместо того, чтобы просто возвращать «успех», вы можете попытаться вернуть реальный объект:

respond_to do |format|
  format.json { render :json => {:message => "success"} }
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...