سؤال

أرغب في تحميل ملف ثم معالجته في تطبيق Ruby on Rails.عادةً ما يكون تحميل الملف قصيرًا جدًا، لكن المعالجة من جانب الخادم يمكن أن تستغرق بعض الوقت (أكثر من 20 ثانية) لذا أريد أن أعطي المستخدم بعض المؤشرات - شيء أفضل من شاشة "معالجة..." التي لا معنى لها.

أحاول استخدام الكود التالي في العرض

<%= periodically_call_remote(:url => {:action => 'progress_monitor', :controller => 'files'},
                 :frequency => '5',
                 :update => "setProgress('progressBar','5')"
                 ) %>

محتوى المعلمة:update هو جافا سكريبت الذي أريد تشغيله كل 5 ثوانٍ

والكود التالي موجود في وحدة تحكم الملفات

def progress_monitor
  render :text => 'whatever'
end

في نهاية المطاف، ستعيد طريقةprogress_monitor التقدم الحالي كعدد صحيح (% مكتمل) وسيتم تمريره إلى كود JavaScript 'setProgress' (الذي سيؤدي إلى تحديث عنصر على الشاشة)

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

هل يمكن لأي شخص أن يساعدني، أم أنني أتعامل مع هذا بطريقة خاطئة؟

هناك سؤال متابعة لهذا، لقد قمت بتحديث هذا السؤال في الأصل ولكن التحديث كان مختلفًا بما يكفي لتبرير سؤال جديد، هنا.

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

المحلول

periodically_call_remote() التحديثات أ div.لن يستدعي وظيفة JavaScript الخاصة بك.أنا لست خبيرًا في JavaScript، ولكن لحل مشكلتك، يجب عليك حل مشكلتك الخاصة xmlhttp يتصل.لو كنت مكانك، لاستخدمت طلب AJAX الخاص بالنموذج الأولي

http://www.prototypejs.org/api/ajax/request

واستخدم settimeout أو setinterval الخاص بـ JavaScript لإجراء الاستقصاء الدوري

http://www.elated.com/articles/javascript-timers-with-settimeout-and-setinterval/

آمل أن يساعد هذا في الواقع لأنني واجهت نفس prb أيضًا =)

نصائح أخرى

ال :update يجب أن يسرد الخيار div الذي تريد تحديثه فقط، وليس يحتوي على Javascript الذي تريد تقييمه.

لا يزال مساعدو Rails جيدين جدًا في هذا الموقف، وليست هناك حاجة لكتابة الكثير من ملفات JS المخصصة.إذا كنت ترغب في تنفيذ JS عند العودة، فالطريقة السهلة هي تقديم قالب RJS.إذا كنت ترغب في القيام بذلك باستخدام HTML خالص، فما عليك سوى عرض طريقة عرض (أو جزئية، أو العودة مباشرة من ملف render الطريقة باستخدام HTML لشريط التقدم) ووضع div لشريط التقدم في :update خيار periodically_call_remote طريقة.

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