مراقبة عملية من جانب الخادم على تطبيق Rails باستخدام AJAX XMLHttpRequest

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

سؤال

أستخدم ما يلي في صفحة الويب ولكن لا يمكنني الحصول على رد من الخادم أثناء معالجته

<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')'، فسيظهر لي مربع حوار يقول مرحبًا كل ثانيتين...كما هو متوقع.

ومع ذلك، لا يقوم الخادم أبدًا بتسجيل أي استدعاء لطريقة "progress_monitor" في "الملفات" ولا حتى محاولة فاشلة.

إذا قمت بالنقر فوق الارتباط

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

يقوم بإجراء اتصال بالخادم، ويحصل على استجابة ويعرض مربع الحوار، لذلك أفترض أن المسارات وصياغة الجملة والتسمية كلها على ما يرام.

أنا حقا لا أعرف لماذا لا يعمل هذا.هل هذا بسبب استدعاء طريقتين في نفس وحدة التحكم عبر عناوين URL؟

أنا أستخدم Rails 2.1.0 في بيئة تطوير على OS X 10.5.5 وأستخدم Safari 3.1.2

(ملاحظة:وهذا يتبع من آخر سؤال, ، لكنني أعتقد أن الأمر مختلف بما فيه الكفاية ليستحق سؤاله الخاص.)

هل كانت مفيدة؟

المحلول

إذا كنت لا ترى رسائل في ملف السجل الخاص بك لاستدعاء "progress_monitor"، فمن المحتمل ألا يتم إرسال الطلب أبدًا.

جرب هذا:

  1. حاول استخدام عنوان URL الكامل بدلاً من عنوان URL النسبي لطلب Ajax.لقد واجهت مشكلات مع عناوين URL النسبية على بعض المتصفحات باستخدام Ajax.Request.

  2. تمكين Firebug أو شريط أدوات مطور IE.يجب أن تكون قادرًا على معرفة ما إذا كان الاتصال بـprogress_monitor يعمل أم لا.إذا كان هناك خطأ في برنامج جافا سكريبت، فسوف ترى الخطأ بوضوح باستخدام هذه الأدوات.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top