سؤال

لدي برنامج نصي يفرض التنزيل وأقوم بإجراء اتصال به عبر Javascript.ومع ذلك، لا يظهر مربع الحوار، إليك البرنامج النصي download.php:

header("Pragma: public"); // required
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false); // required for certain browsers 
header("Content-Type: $ctype");
// change, added quotes to allow spaces in filenames, by Rajkumar Singh
header("Content-Disposition: attachment; filename=\"".basename($properFilename)."\";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($filename));
readfile("$filename");
exit();

إليك Javascript (باستخدام JQuery):

///force download
           $.ajax({
           type: "GET",
           url: "download.php",
           data: 'file=' + msg + '&properFilename=' + properFileName,
           success: function(msg){

              window.location.href = msg;

         });//ajax

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

أعلم أن رسالة متغير JS تحتوي على الملف بالرؤوس الصحيحة ولكني لا أعرف ما يجب فعله به حتى يعرض مربع حوار التنزيل.

شكرا لكم جميعا

ملاحظة.لا أعرف مكان وضع هذا الموضوع JS أو PHP.

يحرر:

لدي النهج الصحيح وأنا متأكد من ذلك :) - يأتي أحد المستخدمين إلى موقعي، ويملأ نموذجًا ويضغط على إرسال.وبعد بضع ثوانٍ، من المفترض أن يظهر ملفهم في مربع حوار يمكنهم تنزيله.لفعل هذا:

أقوم بإجراء مكالمة AJAX للحصول على الملف وتنزيله.أستخدم البرنامج النصي PHP لإرسال الرؤوس.الآن كل ما أحتاجه هو طريقة لإظهار مربع حوار التنزيل !!

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

المحلول

إنه لا يظهر مربع الحوار لأنه مكالمة Ajax.

window.location.href = msg;

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

يحرر

إذا كنت تريد إرسال النموذج وإظهار مربع الحوار الخاص بالتنزيل، فقم بذلك:

<script>
function showDialogBox(form) {
    form.submit();
    window.location.href = "/download.php?file=XXX&properFilename=XXX";
}
</script>
<form onsubmit="showDialogBox(this);">

</form>

نصائح أخرى

إذا كان كامل النصي download.php لا أستطيع أن أجد في ذلك ملف $ متغير (فقط $ اسم) - ولكن في JS ترسل متغير ملف $. ثانيا: شيئا خاطئا في JS - لماذا كنت تستخدم مثل اسم msg متغير في data: وفي success:

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

وأعتقد أنه إذا قمت بإنشاء (حتى خفية؟) iframe على تلك الصفحة وإعادة توجيه إلى أن تحميل URL الذي ستحصل عليه أن الحوار. YMMV، HTH.

فب

وأنا لم مشفرة لبعض الوقت حتى أنا لست متأكدا مما إذا كان هناك أي شيء خاطئ مع التعليمات البرمجية. ولكن أعتقد أن المشكلة هي في نهجكم. تحتاج إلى تحميل download.php في إطار ليس بوصفه استجابة لدعوة اياكس. وذلك أساسا تحتاج إلى تشكيل إطار iframe غير مرئية في وثيقة وأشر إلى download.php مثال المعلمات الحصول على إلحاق رابط.

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