CakePHPでのweb開発は初めてで手探り状態で始めました。
やりたかったこととしては、CSVをreadfileでダウンロードさせてから、json_encodeでajaxの呼び出し元へ返却としたかったです。
なので以下と記載し、試したところうまくいかず。
何故か、本来readfileでダウンロードさせるcsvの内容がajaxの戻り値として認識されていました。
js側
$.ajax({
url: 'URL',
data: formData,
type: "POST",
contentType: false,
processData: false,
dataType: 'json',
success: function (date) {
BlockEnd();
},
error: function(x, s, e) {
alert(s + e);
BlockEnd();
}
});
php側
header('Content-Type: application/force-download');
header('Content-Length: '.filesize(TEMPFILE.$DownloadFileName.'.csv'));
header('Content-Disposition: attachment; filename="' . $DownloadFileName . '.csv"');
readfile('/var/www/html/test/tempfile/test.csv');
echo json_encode(date)
そのせいで、以下のエラーが。
parsererrorSyntaxError: Unexpected token ● in JSON at position 0
理由はわからないですが、
ajaxとreadfileで調べると、同じような内容に苦しんでいる方の質問が1件だけ見つけられました。
javascript - Download file with ajax and php - readfile not working - Stack Overflow
回答としては分けて処理しないとダメだとのこと。
そのため、
ajaxでの処理を終えたあと、成功すればlocation.hrefでダウンロードのURLにアクセスする方法で乗り切りました。
$.ajax({
url: 'URL',
data: formData,
type: "POST",
contentType: false,
processData: false,
dataType: 'json',
success: function (date) {
location.href = 'csvダウンロードURL指定';
BlockEnd();
},
error: function(x, s, e) {
alert(s + e);
BlockEnd();
}
});