هل هناك طريقة للكشف عن بدء التحميل في جافا سكريبت؟

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

سؤال

في المشروع الحالي لدينا نحن نقدم تنزيل PDF التي يمكن تخصيصها من قبل المستخدم من خلال نموذج HTML انه يقدم. يستغرق عدة ثوان لتوليد PDF حيوي وأود أن تصور هذا، على سبيل المثال عن طريق تعطيل زر الإرسال حتى يبدأ التحميل. للأسف، لم أتمكن من ايجاد وسيلة للكشف عندما يبدأ التنزيل *. ولذا فإنني لا أعرف متى لإعادة تمكين زر الإرسال.

وحاولت بالفعل لتحديد IFRAME كهدف من شكل HTML بلدي، على أمل أن الحدث onload أن يتم تشغيل. لم يكن، ولكن - ربما لأن يتم إرسال PDF مع "Content-disposition: attachment" رأس ولم يتم تحميل ذلك فعلا في IFRAME

والحل الوحيد الذي يمكنني أن أفكر من الآن ينطوي على توليد PDF إلى ملف مؤقت على الخادم الذي أود أن تجنب.

و*) واسمحوا لي أن أوضح هذا: لم أكن بحاجة إلى معرفة ما إذا كان التنزيل النهائي أو حتى لو بدأ ذلك حقا. أود أن كشف عن النقطة التي المتصفح سيطلب من المستخدم سواء فتح أو حفظ الملف. أعتقد يحدث هذا عندما يحصل المتصفح على رأس HTTP.

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

المحلول

وماذا كنت تريد أن تكون قادرة على الكشف عندما يكون حجم التغيرات الملف الذي تم تنزيله من 0 إلى قيمة موجبة. بقدر ما أنا أعلم أنه من المستحيل أن تفعل ذلك مع جافا سكريبت - كنت في حاجة الى المكونات التي يمكن الوصول إلى نظام الملفات العميل

وهناك عمل أوصى حول: إنشاء جلسة لكل تنزيل. هل لديك الاستطلاع العميل الخادم عن حالة التحميل. هذا يمكن أن يكون "غير موجودة"، "لم تبدأ"، "بدأ"، "انتهى". تحتاج العمل جنبا بعض الخادم أن تستمر وتحديث حالة التنزيل بالإضافة إلى إطار AJAX.

نصائح أخرى

إذا كنت أنت وأود أن تفعل مكالمة أجاكس إلى الخادم المعلومات، إنشاء ملف، ثم إرجاع اسم ملف / الهوية / أيا كان إلى جافا سكريبت، الذي ثم يجعل window.location مثل download.php؟ معرف = س (ولكن تم إنشاء ملف بالفعل، لذلك هو مجرد وضع الرؤوس والقراءة بها) وعند هذه النقطة يمكنك إعادة تمكين تقديم.

وأبسط حل سيكون لتقدير الوقت (بسخاء) وتفعل ذلك بهذه الطريقة. انها الإختراق، لكنه يعطي النتيجة المرجوة. قد يكون الخيار الآخر لتقديم الاستمارة مع رد باستخدام أياكس إلى تقديم نموذج ولها تفاصيل مولد عودة إلى صفحة الاتصال. http://www.jquery.com/ قد يكون مكانا جيدا لبدء لهذا الخيار.

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