0
JSONを取り込み、Excelファイルを返すAPIエンドポイントがあります。エンドポイントはファイルへのリンクではなくファイルを直接送信します。 JQuery AJAXを使用してファイルをダウンロードするにはどうすればいいですか?投稿のリクエストを使用してExcelファイルをダウンロード
バックエンドのコード:
public function postExcel() {
// Parse request body
$reqBody = json_decode(file_get_contents('php://input'));
// On Valid Request
if(isset($reqBody, $reqBody->regno, $reqBody->offset) && $reqBody->offset < 100 && $reqBody->offset >= 0) {
// Create and add metadata to the workbook
$workbook = new \PHPExcel();
$workbook->getProperties()
->setCreator('AUScraper')
->setTitle('AU Results')
->setLastModifiedBy('AUScraper')
->setDescription('generated by AUScraper')
->setSubject('generated by AUScraper')
->setKeywords('anna university unofficial semester result API')
->setCategory('semester results');
$worksheet = $workbook->getSheet(0);
$worksheet->setTitle('results');
// Get the results
$results = $this->requestAU($reqBody->regno, $reqBody->offset);
// Update worksheet
//Output the file
ob_clean();
header("Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
header("Content-Disposition: attachment; filename=\"results.xlsx\"");
header("Cache-Control: max-age=0");
header("Expires: 0");
$workbookWriter = new \PHPExcel_Writer_Excel2007($workbook);
$workbookWriter->save("php://output");
}
// On Invalid Request
header('Content-Type: application/json');
http_response_code(400);
return json_encode(['error' => 'invalid request']);
}
フロントエンドコード:
import $ from 'jquery';
import 'materialize';
$(() => {
$('#reg_form').submit(() => {
// format data to send
let form_data = {};
form_data.regno = $('#reg_no').val();
form_data.offset = $('#offset').val();
// Send the request
$.ajax({
url: 'http://localhost/git_repo/AUScraper/app/public/api/excel',
data: JSON.stringify(form_data),
type: 'POST',
contentType: 'application/json',
success: function(data) {
var blob=new Blob([data], {type : 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
var link=document.createElement('a');
link.href=window.URL.createObjectURL(blob);
link.download="result_"+new Date()+".xlsx";
link.click();
},
error: (xhr,status,error) => {
let errorMessage = JSON.parse(xhr.responseText);
Materialize.toast(errorMessage.error, 2000);
}
});
return false;
});
});
私は、事前にサーバーにファイルを保存したいのですが、ちょうどそれをダウンロードしないでください。前もって感謝します。
、あなたが実際に試してみて、それを達成することにより、コードの多くを持っているように見える「私はjQueryのAJAXを使用してファイルをダウンロードするにはどうすればよいです」 。あなたの現在のコードがどこに間違っているのか正確に説明してください。 – ADyson
@ADysonあいまいな質問を申し訳ありません。問題は、私はajax経由でExcelファイルをダウンロードすることができましたが、ファイルが壊れていたことです。私は問題を解決し、以下の解決策を掲載しました。 – AravindVasudev