アラキタウン

黒歴史や生き恥を切り売り

ajaxの中でreadfileできなかった。

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();
    }
});