Подтвердить что ты не робот

Загрузка файла 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

4b9b3361

Ответ 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