AJAX XMLHttpRequest を使用した Rails アプリケーション上のサーバー側プロセスの監視

StackOverflow https://stackoverflow.com/questions/126011

質問

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 の 'create' メソッドはファイルを適切に処理し、(フォーム上の送信ボタンに従って) 正しい結果を取得します。「//alert('Hello')」行のコメントを解除すると、2 秒ごとに Hello というダイアログが表示されます。予想通り。

ただし、サーバーは、失敗した試みであっても、「files」内の「progress_monitor」メソッドへの呼び出しをログに記録することはありません。

リンクをクリックすると

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

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

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

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

(注意)これは別のものに続きます 質問, 、しかし、それ自体が質問に値するほど十分に異なると思います。)

役に立ちましたか?

解決

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

これを試して:

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top