2017-08-13 13 views
2

ajaxリクエストを使用して、レールコントローラのアクションから応答を取得するときに奇妙な動作が発生しました。Rails:jsからAjaxへのリクエストで応答する

$.ajax({ 
    type: 'GET', 
    url: '/notifications', 
    success: function(result) { 
     eval(result); 
    } 
}); 
def index 
    respond_to do |format| 
     format.html { redirect_to root_url, alert: 'Page not accessible' } 
     format.js 
    end 
end 

だからこれrespond_toブロックは、要求を使用する際にRailsのremote: trueオプションで正常に動作しますが、AJAXでちょうどroot_urlに要求をリダイレクトし、それを呼び出します。

jsonをAjaxリクエストのdataTypeと指定する場合。そのようにJavaScriptは正常に返されますが、有効でないためjsoneval()は実行されません。

JavaScript内からのリモートリクエストを開始する方法も、返されたJavaScriptが実行可能なデータ型を指定する方法もありますか?


はしても、トリックを行いませんAJAX呼び出しに dataType: 'text/javascript',を指定します。

+2

てみ 'データ型:?「 – Pavan

+0

@jonhue は、あなたのインデックス・アクションで' '場合request.xhrをチェックしてみましたscript''? – cnnr

+0

@pavanあなたの提案をありがとう!後で家に帰るときに試してみよう – jonhue

答えて

2

だからこれrespond_toブロックは、Railsの リモートで要求使用した場合正常に動作します:trueオプションを、しかしAJAXでちょうどそう来ている要求フォーマットを

をroot_urlする 要求をリダイレクトし、それを呼び出しますコントローラへの接続はHTMLではなく、JSです。 dataType: 'script'を使用すると、JSという要求が生成され、問題を解決するはずです。

$.ajax({ 
    type: 'GET', 
    dataType: 'script', 
    url: '/notifications' 
}); 
+0

Hmm ..それは動作しているようです - ajaxリクエストは要求されたjavascriptを返します。しかし同時に、成功コールバックはそれを実行しません。 – jonhue

+0

@jonhue成功コールバックには何がありますか? – Pavan

+0

元の投稿に追加しました。 – jonhue

関連する問題