2013-02-23 4 views
5
は私の一つのプロジェクト、コードで

レール/ Ajaxでリモートリンクに

= link_to "add", new_me_category_path, class: "btn btn-success", remote: true 

は正しくリモートフォームをロードすることができます。

しかし、一部のブラウザでは動作しません。ブラウザはレスポンスjsコードを実行しませんでした。 "データ:{type:"スクリプト "}"を次のように追加する必要があります。

= link_to "add", new_me_category_path, class: "btn btn-success", remote: true, data: {type: "script"} 

理由を知りたいと思います。

+0

もう少しコードを追加できますか? – Kamil

答えて

4

イムないJSの専門家、と私はルビーを知らないが、私は思う:

データ型がscriptに設定されている場合 - ダウンロードされたコードはすぐにロードされて実行されます。

データ型がデフォルト(html)の場合、ダウンロードされたコードはブラウザにロードされます。あなたはそれを "手動で"(たとえば、いくつかの関数を呼び出すことによって)実行する必要があります。

コードに、以前に読み込まれたコードで使用する関数がいくつかあります。これらの関数は利用可能で、動作します(データ型がhtmlの場合)。

コードに定義されたイベントがある場合、コードは実行されなかったため、初期化されていないため動作しません。

私の説明が悪い場合は、jQuery.get()jQuery.getScript()の違いについてお読みください。

1

適切なテンプレートをロードする場合は、.ejsの拡張子(または、このような生のスクリプトをレンダーする:render js: 'some code')が必要です。あなたはこのようEJSテンプレートでjを使用してHTMLをエスケープする必要があります。

template.ejs

$('some selector').html('<%= j render('some template') %>'); 

もURLをお願いします。正しいものは.jsで終わるはずです。舞台裏

2

、jQueryのajax方法が使用されます。http://api.jquery.com/jquery.ajax/remote: trueによって行われたリンクのdata-remote="true"属性が設定されるたびにUJS https://github.com/rails/jquery-ujs、で。

ドキュメントで述べたように、AjaxがHTTPヘッダ送信を受け入れ、ここでUJSによってアンカーのdata-属性から取得されajax()に渡さdataTypeaccepts引数に基づいて、戻り値を、解釈を判定する。

data-type属性でdataTypeが設定されていない場合、jQueryは要求と応答の種類を「知的に」推論します。明示的に指定しないと、矛盾が説明されます。

関連する問題