2012-02-27 16 views
2

アクションからjsonを取得しようとしていますが、問題があります。ajaxリクエストを作成して、railsで成功を返すアクション

"format.js"を返して ".js.erb"ファイルを返すことができますが...私はいくつかのものを返すアクションがあり、2つの異なる方法でそれを処理したいとします。私はそれを返すとき両方の方法が実行されるので、同じ.js.erbで2つの異なる方法を持つことはできません。つまり、そのファイルを返すと、そのファイルは完全に処理されます。

私はjQueryの方法を使用しようとしました。

私が持っている:

# GET /posts/slug/hidden_content.json 
def hidden_content 
    @post = Post.find(params[:id]) 
    @post = hidden_post_part(@post.body) 

    respond_to do |format| 
    format.json { render json: @post, :status => :ok} 
    end 
end 

そしてcontroller.coffee中:

$ -> 
    # Render hidden part of post 
    $(".showallpost img").click(-> 
    post_url = $(this).next().attr("href").split("/").pop(); 
    $.ajax 
     url: Routes.hidden_content_path(post_url), 
     type: "GET", 
     contentType: "application/json", 
     success: (data) -> 
     console.log "foo" 
); 

GETは完璧に動作し、それは私が必要なものを返しますが、成功関数が呼び出されることはありません、私はしないでください「foo」ログを参照してください。

私はアクションが呼び出し元にGETが成功したことを伝える何かを返すべきだと思います。 (私は試してみました:運がない状態)。

私は自分のGETデータを扱うことができません。

アイデア?あなたのjs.erbで

+0

何がデータ型にしようとするときについて:「JSON」とcontentTypeオプションを削除しますか?または同じURLに対してリクエストを行いますが、.jsonを追加します。問題は、jQueryがレスポンス形式が期待どおりでないため、これを失敗したリクエストと分類することです。 –

+0

ルートとは何ですか? –

+0

@TanelSuurhans私はdataTypeを試してみましたが、URLに.jsonを付けても、成功はトリガされません。そしてRyan https://github.com/railsware/js-routesレールルートを手助けする便利なjsスクリプト。 –

答えて

1

私のコントローラは、私は

dataType: 'json' 

を使用する場合ので、私は使用するために必要な、代わりにJSONのプレーンHTMLを返したように思える:それはいくつかのJSONを返す必要がありますので、

dataType: 'html' 

ちょっと奇妙な、しかしよく、 できます。

マイク・ジョンソンへのすべてのおかげで:jquery doesn't call success method on $.ajax for rails standard REST DELETE answer

0

、あなたが

<% if success %> 
    some javascript you want to execute on success 
<% else %> 
    some stuff you want to do on failure 
<% end %> 
+0

問題は、さまざまなビューからそのアクションを使用し、別の方法でデータを使用したいということです。その解決策は機能しません。そのため、私は古い方法でajaxを使いたいのです。 –

0

私は、コードの非常に類似した作品を試みたが、それが動作を入れることができます -

$ -> 
    # Render hidden part of post 
    $(".showallpost").click -> 
    #post_url = $(this).next().attr("href").split("/").pop(); 
    $.ajax 
     url: "/posts/1.json", #Routes.hidden_content_path(post_url), 
     type: "GET", 
     contentType: "application/json", 
     success: (data) -> 
     console.log "foo" 

私はあなたが前に何であるかURLをご確認ください示唆要求が送信されます。 Jqueryのクロスドメインリクエストのチェックに巻き込まれ、まったく解雇されないかもしれません。ちょうど "posts/1.json"ではなく "localhost:3000/posts/1.json"をURLとして使用したときに私に起こりました

関連する問題