Ich verwende liuggio/ExcelBundle, dies ist mein Code zu schreiben und die xlsx herunterladen:Symfony und PHPExcel (mit React.js), nicht
$writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel2007');
$response = $this->get('phpexcel')->createStreamedResponse($writer);
$dispositionHeader = $response->headers->makeDisposition(
ResponseHeaderBag::DISPOSITION_ATTACHMENT,
'XXX_-_' . (new \DateTime())->format('Y_n_j') . '.xlsx'
);
$response->headers->set('Content-Type', 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8');
$response->headers->set('Cache-Control', 'maxage=1');
$response->headers->set('Content-Disposition', $dispositionHeader);
Wenn ich die Methode direkt von einem Aufruf Reagieren Komponente es herunterladen ok:
e.preventDefault();
location.href = path.url_descarga_excel;
$.UIkit.init();
Aber ich muss einige Argumente übergeben. Wenn ich versuche, mit AJAX zum Download:
e.preventDefault();
var sist_electrico = {
sic: ReactDom.findDOMNode(this.refs.SIC).checked,
sing: ReactDom.findDOMNode(this.refs.SING).checked
};
var periodo = {
inicio: this.refs.fechaInicio.getValue(),
fin: this.refs.fechaFin.getValue()
};
var form = $('input[name="radio_tipoForm"]:checked').val();
$.ajax({
url:path.url_descarga_excel, async:false,
type:"post", dataType:"json", data:{form, sist_electrico, periodo},
});
es doens't herunterladen, es zeigt nur die Zeichen der Datei in der Vorschau von Chrome:
Vorschau:
PK�QI%���a[Content_Types].xml͔]K�0���%��f� "�v��R... etc
Headers:
Request URL:http://XXX/app_dev.php/reporte/descargaExcel
Request Method:POST
Status Code:200 OK
Response Headers
view source
Cache-Control:maxage=1, private
Connection:Keep-Alive
Content-Disposition:attachment; filename="XXX.xlsx"
Content-Type:application/vnd.openxmlformats-officedocument.spreadsheetml.sheet; charset=utf-8
Date:Thu, 11 Aug 2016 14:15:50 GMT
Keep-Alive:timeout=5, max=100
Server:Apache/2.4.6 (CentOS) mod_fcgid/2.3.9 PHP/5.4.45
Transfer-Encoding:chunked
X-Debug-Token:ea66a8
X-Debug-Token-Link:/app_dev.php/_profiler/ea66a8
X-Powered-By:PHP/5.4.45
Request Headers
view source
Accept:application/json, text/javascript, */*; q=0.01
Accept-Encoding:gzip, deflate
Accept-Language:es-ES,es;q=0.8
Cache-Control:no-cache
Connection:keep-alive
Content-Length:108
Content-Type:application/x-www-form-urlencoded; charset=UTF-8
Cookie:PHPSESSID=m6tcoofak8ihe02nit0nj7lj85
Host:cnecontrato.adevcom.cl
Origin:XXX
Pragma:no-cache
Referer:http://XXX/app_dev.php
User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
X-Requested-With:XMLHttpRequest
Was mache ich falsch?
Ich benutze auch $ writer-> save ('php: // output'); Am Ende des Codes, aber der einzige Unterschied ist das: http://fotos.subefotos.com/69cda253c4e362862c62b6702e048127o.png – pmirnd
Ich habe gerade gelesen, dass es nicht möglich ist, Dateien herunterzuladen, obwohl Ajax Anrufe aufgrund von JavaScript-Sicherheit, nicht wissen, wie man diese Argumente übergibt und die Datei herunterlädt, kann keine Hilfe dafür sehen. Alles, was die Leute vorschlagen, ist, window.location zu verwenden, um das onClick in einem anderen Fenster zu öffnen, aber das ist nicht mein Fall ... – pmirnd