Ich habe Probleme mit dem Erzielen, was ich will und bin mir nicht sicher, ob es möglich ist. Ich verwende CodeIgniter
und PHP
für meine Webanwendung. In meiner Home-Ansicht können Benutzer eine Datenbank abfragen, und die Ergebnisse werden in der Tabellenform auf der Seite generiert und angezeigt. Der Benutzer wird dann die Tabelle überprüfen und die Option zum Herunterladen als xlsx
Excel-Datei zur Verfügung gestellt werden. Ich verwende einen Ajax-Post, um die Tabellendaten an meine PHP controller
zu senden, die die Excel-Datei erstellen wird. Ich brauche das auch in allen Browsern, besonders in Safari, da der Client sowohl von Ipads als auch von Desktop-Computern auf die Anwendung zugreift.Jede Möglichkeit, Datei-Download von Ajax-Antwort mit CodeIgniter und PHPExcel
My home ajax Beitrag: (t ist die ID der erzeugten Tabelle)
$("#btnExport").click(function() {
$.ajax({
type: "POST",
url: '<?php echo base_url();?>index.php/Home/excel',
datatype: 'html',
data: {
'queryData': $("#t").html()},
success: function (response) {
alert(response);
}
});
});
Meine Reglerfunktion:
public function excel()
{
$this->load->library('excel');
$filename = "data";
$table = $this->input->post('queryData');
$objPHPExcel = new PHPExcel();
$tmpfile = time().'.html';
file_put_contents($tmpfile,$table);
$objReader = PHPExcel_IOFactory::createReader('HTML');
$objPHPExcel = $objReader->load($tmpfile);
header('Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');
header('Content-Disposition: attachment;filename='.$filename);
header('Cache-Control: max-age=0');
$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
$objWriter->save('php://output');
unlink($tmpfile);
}
Das Problem ist der Umgang mit der Ajax-Antwort, die ich gelesen habe, Es ist unmöglich, eine Datei von Ajax herunterzuladen. Alles, was ich versucht habe funktioniert nicht Die Antwort ist binär codierte Daten Ich nehme an, ist die Excel-Datei. Gibt es eine Problemumgehung für dieses Problem? Ich entschied mich für Ajax, da sich die Tabelle bei der aktuellen Abfrage dynamisch ändern kann und entsprechend an den Server gesendet werden muss. Danke für jede Hilfe.
BEARBEITEN In der verknüpften Frage geht es darum, Formulare zu senden und keinen Download auszulösen. Ich übergebe keine Formulare, sondern übergebe nur eine HTML-Tabelle an die PHP
, um die Excel-Datei zu erstellen. Ich sehe nicht, wie das für mein Problem relevant ist. Missverständnis ich?
Mögliche Duplikate von [ jQuery Ajax POST Beispiel mit PHP] (http://stackoverflow.com/questions/5004233/jquery-ajax-post-example-with-php) –
konstruieren Sie Tabelle in Controller? – EaBangalore
@EaBangalore Ja, die Tabelle wird in verschiedenen Funktionen innerhalb desselben Controllers erstellt. – ees3