2012-11-24 2 views
2

Я пытаюсь сделать одно сообщение с помощью coffeescript и jquery, но мой скрипт не обрабатывает обратный вызов успеха.Мой пост ajax с coffeescript не обрабатывает обратный вызов успеха

* cards_controller.js.coffee *

if $('form').attr('action') == '/cards' alert "Hey ho" $('#add_card').click (e) -> 
    e.preventDefault() 
    $.ajax '/cards', 
     type: 'PUT' #Tried POST also 
     dataType: 'json' 
     error: (jqXHR, textStatus, errorThrown) -> 
     console.log textStatus 
     success: (res) -> 
     console.log "Card name: " + data.card.code + "\nPoints: " + data.points 
     complete: (jqXHR, textStatus) -> 
     console.log "Status: " + textStatus 

index.html.erb

<%= form_tag url_for(:controller => 'cards', :action => 'create'), :remote => true %> 

И сгенерированный браузер следующий:

(function() { 

    if ($('form').attr('action') === '/cards') { 
    alert("Hey ho"); 
    $('#add_card').click(function(e) { 
     e.preventDefault(); 
     return $.ajax('/cards', { 
     type: 'POST', 
     dataType: 'json', 
     error: function(jqXHR, textStatus, errorThrown) { 
      return alert(textStatus); 
     }, 
     success: function(res) { 
      console.log("Card name: " + data.card.code + "\nPoints: " + data.points); 
      return $('#card-list > tbody:last').append('<tr>test</tr><tr>uauauiua</tr>'); 
     }, 
     complete: function(jqXHR, textStatus) { 
      return console.log("Status: " + textStatus); 
     } 
     }); 
    }); 
    } 

}).call(this); 

* cards_controller .rb *

def create 
    card = Card.find_by_code(params[:code]) 

    if card && card.user.nil? 
     current_user.add_card(card) 
    else 
     return render :status => 401, :json => { :message => "O cartão não existe ou já está cadastrado"} 
    end  

    respond_to do |format| 
     format.js { render json: { :card => card, :points => card.card_business_points.sum("points") } , content_type: 'text/json' } 
    end 
end 

Запрос успешно переходит к контроллеру, и карта создана правильно. Проблема в том, что отладка в Chrome кажется, что она не обрабатывает обратный вызов и не регистрируется.

Пожалуйста, кто-нибудь может помочь с этим?

+0

Вы не можете использовать метод 'PUT' напрямую. [Как поместить данные на рельсы с помощью JQuery] [1] [1]: http://stackoverflow.com/questions/907910/how-do-i-put-data-to- rails-using-jquery – Oleg

+0

@Oleg: Вы заметите, что этот вопрос с 2009 года (т.е. миллион интернет-лет назад). Rails 3 очень рад работать с PUT. –

+0

Я тоже пробовал с сообщением, но без успеха! – felipeclopes

ответ

4

Я только что понял, в чем проблема.

В моем coffeescript при выполнении отправки с помощью функции jQuery ajax я забыл добавить поле данных с содержимым, которое я хочу отправить.

Окончательный сценарий похож на этот:

(document).ready -> 
    if $('form').attr('action') == '/cards' 
     $('#add_card').click (e) -> 
      e.preventDefault() 
      $.ajax '/cards', 
       type: 'POST' 
       dataType: 'json' 
       data: { code: $("#code").val() } 
       error: (jqXHR, textStatus, errorThrown) -> 
        alert textStatus 
       success: (data, textStatus, jqXHR) -> 
        console.log "Card name: " + 
           data.card.code + "\nPoints: " + data.points 

Спасибо за помощь, я не мог понять, почему мои функции обратного вызова не вызывается, когда я не прошел параметр данных.

С уважением!

Смежные вопросы