2011-07-05 18 views
4

だから、私はCoffeeScript Rails 3.1ですごくうまくやっています。私は、すべての通常のルートをインデックス、表示、作成、編集、更新、破棄するリソースを持っています。Rails 3.1 ajax:成功処理

def create 
    @todo = Todo.new(params[:todo]) 

    respond_to do |format| 
     if @todo.save 
     format.html { redirect_to @todo, notice: 'Todo was successfully created.' } 
     format.json { render json: @todo, status: :created, location: @todo } 
     format.js {render json: @todo } 
     else 
     format.html { render action: "new" } 
     format.json { render json: @todo.errors, status: :unprocessable_entity } 
     end 
    end 
    end 

Imは.js.erbビューを使用しないようにしよう:私は以下の持って作成するためのコントローラで

<%= form_for @todo, :remote => true do |f| %> 
    <div class="field"> 
    <%= f.label :name %><br /> 
    <%= f.text_field :name %> 
    </div> 
    <div class="actions"> 
    <%= f.submit %> 
    </div> 
<% end %> 

インデックスビューはそうのような:remote => trueを使用してフォームを持っています私はむしろJSONを返すように扱い、すべてのファンシーをToDoリストに追加するなどです。 (それはちょうど私に清潔感を感じる)。私todos.js.coffeeで

私は次のように使用しています

$(document).ready -> 
    $("#new_todo") 
     .bind "ajax:success", (event, data) -> 
     alert("Ajax SUCCESS!!!") 

(うんちょうど警告ボックスを開くためにtytingが機能しない)私は負荷を試みたが、ちょうどこのイベントをトリガすることはできません。要求は正常に完了し、新しいToDoが追加されます。

これについてのお手伝いをいただければ幸いです。ありがとう

+0

XHRの会話が何であるかを見るために、Firebugを調べることができます。それは、あなたのアプリから何が戻ってくるかを明らかにするかもしれない。 –

+0

申し訳ありませんが、新しく作成したtodoアイテムのJSONが返されているはずです。 – Bangline

答えて

8

rails.jsを流し始め、ajax:コールバックのいずれかが発生しているか疑問に思った。

彼らはうまくいきました。送信されたエラー...ハングオン...エラー?これはどうやってできるの?新しいtodoの作成が正常に行われ、応答は私が期待するJSONです。しかし、私はInvalid labelエラーに気づいたコールバックコードをステップ実行します。

クイックGoogleは、後にJSON文字列として返されるhttp://blog.seqmedia.com/?p=484

が判明し、この記事に私をもたらし、Firbugはそれを持って、私は応答を確認することができ、それを正しく解析されました。しかし、rails.jsとjsは一般的に文字列を扱う方法を知らず、上記のエラーを投げました(むしろ私は言うかもしれません)。

ソリューションはrespond_to

format.js {render json: @todo, content_type: 'text/json' } 

にブログの記事最終的に私に解決策を与えたsequence mediaから彼の助けとエイミーのために(BTWブックのような)トレバー・バーナムのおかげで少しでした。

+0

ああ、あなたは私を助けました。私はまったく同じ問題を抱えていて、完全に立ち往生していました。なぜ地球上でjsonをjsonとしてデフォルトでレンダリングしないのですか? – Andrew

+0

ありがとう、それだけでも私を救済した。 – pjmorse

-1
  1. #new_todoとは何ですか?そのIDを持つ要素は存在しますか?あなたのコードに$('#new_todo').length > 0があることと、イベントハンドラをバインドするのが正しい要素であることを確認してください。
  2. ajax:successとは何ですか? jQuery APIはajaxSuccessイベント(Ajax Events docsを参照)を定義していますが、以前はコロンを使用したバージョンは見たことがありません。
+0

#new_todoは、ToDoアイテムが作成されたフォームのIDです。これが存在すると確信しています。すべてのRails3 +アプリケーションのデフォルトでjquery_ujsが追加されました – Bangline

+0

アラートコールバックをフォームの 'submit''イベントにバインドするとどうなりますか? –

+0

Hmmm何かがiffy、何も起こりません。 v.strange ill cobleeescript – Bangline

関連する問題