4

coffeescript と jquery を使用して単一の投稿を行おうとしていますが、スクリプトが成功のコールバックを処理していません。

*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 %>

生成された JavaScript は次のとおりです。

(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 でのデバッグがコールバックで処理されず、ログに記録されないように見えることです。

誰かがこれを手伝ってくれませんか?

4

1 に答える 1

5

何が問題なのか理解しました。

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

助けてくれてありがとう、データパラメータを渡さなかったのになぜコールバックが呼び出されなかったのか理解できませんでした。

よろしく!

于 2012-11-25T16:11:51.297 に答える