0

Web ページで以下を使用していますが、処理中にサーバーから応答を取得できません

<script type="text/javascript">
<!--
   function updateProgress() {
      //alert('Hello');
      new Ajax.Request('/fmfiles/progress_monitor', {
         parameters: 'authenticity_token=' + encodeURIComponent(AUTH_TOKEN),
         onSuccess: function(response) {
            alert(response.responseText);
            fillProgress('progressBar',response.responseText);
         }
      });
   }
//-->
</script>

<% form_for( :fmfile, :url => '/fmfiles', :html => { :method => :post, :name => 'Form_Import', :enctype => 'multipart/form-data' } ) do |f| %>
...
<%= f.file_field :document, :accept => 'text/xml', :name => 'fmfile_document' %>
<%= submit_tag 'Import', :onClick => "setInterval('updateProgress()', 2000);" %>

次に、fmfiles_controller.rb の「作成」メソッドがファイルを喜んで処理し、(フォームの送信ボタンに従って) 正しい結果を取得します。'//alert('Hello')' 行のコメントを外すと、2 秒ごとに Hello というダイアログが表示されます ... 予想通りです。

ただし、サーバーは「ファイル」の「progress_monitor」メソッドへの呼び出しをログに記録することはありません。

リンクをクリックすると

<a href="#" onclick="updateProgress();">Run</a>

サーバーを呼び出し、応答を取得してダイアログを表示するので、ルートと構文と命名はすべて問題ないと思います。

なぜこれが機能しないのか、私には本当にわかりません。同じコントローラー内の 2 つのメソッドが URL 経由で呼び出されているためですか?

OS X 10.5.5 の開発環境で Rails 2.1.0 を使用し、Safari 3.1.2 を使用しています。

(NB これは別の質問の続きですが、独自の質問に値するほど十分に異なると思います。)

4

1 に答える 1

2

ログ ファイルに「progress_monitor」の呼び出しに関するメッセージが表示されない場合は、リクエストが送信されていない可能性があります。

これを試して:

  1. Ajax.Request の相対 URL ではなく、完全な URL を使用してみてください。一部のブラウザーでは、Ajax.Request を使用した相対 URL で問題が発生しました。

  2. Firebug または IE Developer Toolbar を有効にします。progress_monitor の呼び出しが機能するかどうかを確認できるはずです。Java スクリプト エラーがある場合は、これらのツールを使用してエラーを明確に確認できます。

于 2008-09-24T12:12:53.567 に答える