Я хочу использовать функцию ajax для загрузки, посредством которой пользователь нажмет ссылку для загрузки, которая (используя ajax и $ _GET) получит доступ к файлу PHP, который обработает переданные переменные $ _GET и получит доступ к правильному файлу для загрузки.
У меня есть несколько PHP-скриптов для обработки обработки переменных $ _GET, которые работают самостоятельно, но при доступе с помощью Ajax они перестают работать.
Ниже приведен код Ajax / PHP:
function ajaxDown(){ $('#downloadmsg').html( '<img src=\"media/images/ajaxloader.gif\" width=\"128\" height=\"15\">'); $('#downloadmsg').load( 'media/downloads/downManager.php?file=".$filequery['filename']."&ftype=".$downex[1]."'); }
Пожалуйста, просмотрите мой код и помогите мне найти, что я делаю неправильно.
Thanx
Я думаю, проблема в том, что вы пытаетесь загрузить результат файла INTO #downloadmsg, который не будет работать, потому что .load () будет загружать результаты только как HTML … НЕ двоичные данные или другое кодирование.
Одним из подходов, который может работать, является создание скрытого iframe в HTML, например:
<iframe id="secretIFrame" src="" style="display:none; visibility:hidden;"></iframe>
Затем установите attr iframe в ваш запрос:
$("#secretIFrame").attr("src","myphpscript.php?option1=apple&option2=orange");
а затем используя заголовки PHP, чтобы принудительно загрузить, когда источник установлен (вот пример заголовка экспортера, установленного из одного из моих сценариев, использующего поток октетов):
header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Disposition: attachment;filename=data.xls "); header("Content-Transfer-Encoding: binary ");
Надеюсь это поможет!
Я знаю, что опаздываю! Но я думаю, что у меня есть решение, которое немного чище, без использования скрытого iframe, и вам даже не понадобится запрос ajax для этого! Использование заголовков PHP, как указано в принятом ответе в файле download.php
<?php //download.php /* All your verification code will go here */ header("Pragma: public"); header("Expires: 0"); header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); header("Content-Type: application/force-download"); header("Content-Type: application/octet-stream"); header("Content-Type: application/download"); header("Content-Disposition: attachment;filename=".$_GET['file']); header("Content-Transfer-Encoding: binary ");
И на конце JS просто
function download(filename){ window.location="http://whateveryoursiteis.com/download.php?file="+filename; }
Работает как шарм: O