Загрузка файла Ajax с использованием JQuery, PHP
Я хочу использовать функцию 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]."');
}
Пожалуйста, просмотрите мой код и помогите мне найти то, что Im делает неправильно.
Thanx
Ответы
Ответ 1
Я думаю, проблема в том, что вы пытаетесь загрузить результат файла 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 ");
Надеюсь, это поможет!
Ответ 2
Я знаю, что опаздываю! Но я думаю, что у меня есть решение, которое немного чище без использования скрытого 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