2015-03-13 3 views
0

Я использую следующий вызов ajax для отправки некоторых данных на страницу PHP, которая генерирует файл excel. Если я запустил страницу PHP сам по себе с поддельными данными, уже приписываемыми массиву, он загружает файл, но если я попытаюсь запустить php-страницу через кнопку ajax, ничего не загрузится. Я не уверен, в чем проблема, но я получаю 500 Internal Server Error, поскольку php пытается отправить файл обратно. Смотрите ниже:Как вернуть файл с помощью запроса AJAX

Заголовки запросов:

POST /XLS.php HTTP/1.1 
Host: 127.0.0.1 
Connection: keep-alive 
Content-Length: 15 
Pragma: no-cache 
Cache-Control: no-cache 
Accept: */* 
Origin: http://127.0.0.1 
X-Requested-With: XMLHttpRequest 
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/40.0.2214.115 Safari/537.36 
Content-Type: text/plain;charset=UTF-8 
Referer: http://127.0.0.1/multiLine.php 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8,fr-FR;q=0.6,fr;q=0.4 
Cookie: PHPSESSID=rd44cluc503datf36616b9e5b5; popupPartNumber=null 

Заголовки ответов:

HTTP/1.0 500 Internal Server Error 
Date: Fri, 13 Mar 2015 18:21:55 GMT 
Server: Apache/2.4.10 (Win32) OpenSSL/1.0.1i PHP/5.5.15 
X-Powered-By: PHP/5.5.15 
Content-disposition: attachment; filename="multiLine report 03.13.15 - .xlsx" 
Content-Transfer-Encoding: binary 
Cache-Control: must-revalidate 
Pragma: public 
Content-Length: 0 
Connection: close 
Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet 

на основе AJAX я использую:

$.ajax({ 
    url: "XLS.php", 
    type: "post", 
    data: {xl: xl}, 
    }); //closes ajax call 

и я прошло около 7 разных contenttype: опции, чтобы увидеть, изменилось ли одно из них, но никто из них не сделал этого.

Как вернуть этот файл?

+0

Это внутренняя ошибка сервера. Посмотрите на свой серверный код и свои журналы ошибок. Вы не можете определить, что вызвало внутреннюю ошибку сервера от клиента, это не ошибка клиента. – Quentin

ответ

0

Если вы хотите загрузить файл с помощью запроса ajax, у вас есть две возможности.

Поддельные его, перенаправляя пользователя на страницу загрузки и

Как skidadon pointedin комментарий вместо POST с помощью параметра параметру GET

window.location = 'XLS.php?x1='+x1; 

Или использовать библиотеку jquery.fileDownload, которые выполняют в ajax- как файл опыта загрузки

https://github.com/johnculviner/jquery.fileDownload

+0

Я думаю, мне нравится, где вы собираетесь с этим. Кроме того, вы можете отправить параметры «$ _GET» в скрипт download.php, чтобы сообщить, что загрузить. Джон Ву, начни с этим сэром. – skidadon

+0

@skidadon да, ты совершенно прав, просто добавил. Спасибо :) –

+0

Спасибо вам. Нет никакой конкретной причины, по которой мне нужно использовать ajax вообще, если есть другой способ сделать это. Кажется, что это невероятно распространено в Интернете ... Мне просто нужно отправить массив данных на страницу php, а затем загрузить файл, который он генерирует .... –

0

Это не Возможное используя ajax (запрос xrh).

Никогда запрос AJAX не будет загружать файл на ПК пользователя.

Решение является make и невидимым iframe и отправляет ему форму, тогда браузер будет уважать ваш заголовок, указывающий загрузку.

Извините, что на данный момент не являетесь примером для вас, но надеемся, что вы обратились к своей работе в правильном направлении и, таким образом, избегаете тратить больше времени на тестирование.

Смежные вопросы