AJAX XMLHttpRequest を使用した Rails アプリケーション上のサーバー側プロセスの監視
-
02-07-2019 - |
質問
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」の呼び出しに関するメッセージがログ ファイルに表示されない場合は、リクエストが送信されていない可能性があります。
これを試して:
Ajax.Request の相対 URL ではなく完全な URL を使用してみてください。一部のブラウザでは、Ajax.Request を使用した相対 URL で問題が発生しました。
Firebug または IE 開発者ツールバーを有効にします。progress_monitor の呼び出しが機能するかどうかを確認できるはずです。Java スクリプト エラーがある場合は、これらのツールを使用するとエラーが明確に表示されます。