サラリーマンのすらすらIT日記

IT関連を中心とした日々を綴ります。
--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
2010/08/06

PHP-CSV出力自体は簡単だったが、Ext JS側からどうするのか?

昨日の記事で、PHPからのCSV出力は簡単と書きました。確かにPHPプログラム自体は

$filename = "hoge.csv";
header("Content-type: text/html; charset=Shift-JIS");
header("Content-Disposition: attachment; filename=\"{$filename}\"");
$echoString = mb_convert_encoding($echoString, "SJIS-win", "UTF-8");
echo $echoString;

とすればいいということが、いろんなサイトを参考して比較的すぐにわかりました。

ただ少しハマったのが、文字コードの問題。PHPファイルの文字コードがUTF-8では、CSVファイルの先頭にEF,BB,BFの3バイトがついてしまいます。BOMなしのUTF-8Nにしてやるとうまくいきました。このPHPファイルを直接実行すると、「ファイルをhoge.csvに保存します」というダイアログが表示され、必要であればファイル名を変更してCSVファイルを保存できます。

問題はExt JS側からどう呼び出すか。初めは普通に

Ext.Ajax.request({
url: 'hogehoge.php'
,success: function(response, opts) {
// ここには何も書いていない
}
,failure: function(response, opts) {
console.log('server-side failure with status code ' + response.status);
}
}

でできると思っていたのですが、ダメ。hogehoge.phpにはアクセスされるのですが、ダイアログが表示されません。サーバへrequestは送ったが、success時にresponseをどう処理するといったscriptを書いていない(// ここにはなにも書いていないの部分)からと思いましたが、そもそもこのExt JSで処理するscriptは何なのか?

ふと気がついたのが、HTMLタグで書く<a href=~>。これでサーバにアクセスしないとダメなのか、しかしExt JSの中でどう書くのか?いろいろ調べてみると、Ext JSではなく普通のJavaScriptでwindow.openとすればいいことがわかりました。そういえば「ダウンロード機能を持った多くのwebアプリは、ダウンロード時に新しいwindowを開く」ようになっています。例えばこのFC2ブログのアクセス解析ログのダウンロードでも、IEでやると新しいwindowが開きます。で、window.open("hogehoge.php")と書いて実行すると、新しいwindowが開いてダウンロードのダイアログが表示され、ファイル名を確認すると見事にダウンロードされました。

これでCSV出力機能も完成です。

スポンサーサイト

コメント

ちょうど同じ問題にぶつかったんだけどほんとうに助かりました!
2015/03/05(木) 13:59:18 |URL|Tina #hG4QMiCY [編集]
コメントありがとうございます。
お役に立てて幸いです。
今後とも、よろしくお願いします。
2015/03/07(土) 20:05:09 |URL|sookibizviz #zeJMZwsY [編集]

コメントの投稿

  • URL
  • コメント
  • パスワード
  • 秘密
  • 管理者にだけ表示を許可する

トラックバック

トラックバックURL:http://sookibizviz.blog81.fc2.com/tb.php/548-bd5e3f92

■  カレンダー

07 | 2017/08 | 09
- - 1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31 - -

■  プロフィール

sookibizviz

Author:sookibizviz
仕事の内容やソフトの紹介を交えながら、日々の悪戦苦闘を綴っていきます。

■  最新記事

■  最新コメント

■  最新トラックバック

■  月別アーカイブ

■  カテゴリ

未分類 (64)
BizViz (24)
IT (1119)
計量 (76)
環境 (26)
数学 (181)
ニュース (46)
本 (187)
音楽 (113)
囲碁 (5)
将棋 (26)
ブログ (14)
日記 (19)

■  FC2カウンター

■  検索フォーム

■  RSSリンクの表示

■  QRコード

QRコード
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。