2

私は気が狂っている問題を抱えています.

プロトタイプの代わりにRailsアプリでjQueryを使用しており、ajaxFormプラグインを使用してajax経由でフォームデータを送信しています。フォーム データが正常に送信され、対応するコントローラー アクションが正常に呼び出され、js タイプの適切な Respond_to ブロックが正常に呼び出されます。

*.js.erb ファイルのコンテンツがクライアント ブラウザに返され、javascript として解釈されないという事実で問題が発生します。実際には何も起こりません。はい、dataType: 'script' を設定しましたが、まだ機能しません。また、ajaxForm プラグインを使用せず、フォーム送信時に $.post 関数を手動で使用しようとしましたが、それでも同じ結果になりました。

いくつかのコード サンプルについては、ここに私の ajaxForm 呼び出しを示します。

$("#purchase-item-form").ajaxForm({ 
  dataType: 'script'
});

また、accepts ヘッダーを適切に設定しています。私の format.js ブロックが実行されているため、これは正常に機能しています。

jQuery.ajaxSetup({
  'beforeSend': function(xhr) { xhr.setRequestHeader("Accept", "text/javascript") }
});

私のアクション *.js.erb ファイルでは、問題が解決するまで問題のデバッグを支援するために、現時点でアラート ステートメントしかありません。

alert("action processed successfully");

これは、Firefox や Safari では機能しません。firebug コンソールを見ると、アラート ステートメントが ajax 呼び出しからの応答として返されていることがわかります。これは、クライアントによって JavaScript として評価されていないだけです。

参考までに、私は Rails 2.3.4 と jQuery 1.3.2 で実行しています。

4

1 に答える 1

2

まったく同じ問題に遭遇しました。eval返されるコードは手動で行う必要があります。評価されない理由を正確に思い出せませんが、あなたと同じプラグインを使用していたので、これで修正されました。

編集1: 問題の解決に役立ったので、記事を読んでください。

編集2:以下を試してください:

$("#purchase-item-form").ajaxForm({ 
  dataType: 'script',
  success: evalResponse
});

function evalResponse(responseText, statusText) {
  eval(responseText);
}

もう少し詳しい情報については、こちらをご覧ください。

于 2009-10-01T15:40:06.530 に答える