5

私の1つのプロジェクトでは、コードは次のとおりです。

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

リモートフォームを正しくロードできます。

しかし、一部の人は動作できず、ブラウザは応答するjsコードを実行しませんでした。次のように「data:{type: "script"}」を追加する必要があります:

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

理由を知りたい。

4

3 に答える 3

4

私はJSの専門家ではなく、Rubyも知りませんが、次のように思います。

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

データ型がデフォルトの場合(html)-ダウンロードしたコードはブラウザに読み込まれます。「手動で」実行する必要があります(たとえば、何らかの関数を呼び出すことによって)。

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

コードに定義済みのイベントがある場合、それらは初期化されていないため機能しません。コードが実行されなかったためです。

jQuery.get()私の説明が悪い場合は、とjQuery.getScript()メソッドの違いについて読むことができます。

于 2013-02-27T15:12:18.473 に答える
2

舞台裏では、jQueryのajaxメソッドが使用されます。http://api.jquery.com/jquery.ajax/ by uJS https://github.com/rails/jquery-ujsdata-remote="true"リンクの属性が設定されている場合は常に、これが実行されます。によってremote: true

ドキュメントに記載されているように、Ajaxは送信されたHTTP Acceptsヘッダーを決定し、に渡された引数dataTypeと引数に基づいて戻り値を解釈します。これらの引数は、uJSによってアンカーの属性から取得されます。acceptsajax()data-

属性にnodataTypeが設定されている場合data-type、jQueryはリクエストとレスポンスのタイプを「インテリジェントに」推測します。これは、明示的に指定しない場合、不整合を説明する可能性があります。

于 2014-06-26T18:14:32.987 に答える
1

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

template.ejs

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

URLも教えてください。正しいものはで終わる必要があり.jsます。

于 2013-03-06T10:11:13.060 に答える