JqueryからPHPへJSONを渡すには
はい。
ふぃふぃです。
最近javascriptで配列型のデータを扱う機会が増えてきました。
これまでは、特にデータを保管する必要もなかったのですが、
過去データとの比較などをやりたくなってきたので、 サーバにcsv形式で保存する方法を調べておりました。
過去記事にも書きましたがはてな人力検索などで質問をしていると、 どうにも、PHP経由での保存が望ましいとのこと。
PHP、Ajax初心者ということもありかなりはまってしまったのでメモ。
送信側
$(function(){ // 送信・保存するためのデータ配列 var ary_data = new Array(100); //[1,2,3,4,5,6]; for (var i = 0; i < ary_data.length; i++) { ary_data[i]=i; } // 送るデータ形式はJSONでなければ、PHP側でエラーが出る.のでJSON.stringify()でJSON形式に変換 send_data= JSON.stringify(ary_data); // 送信処理 $.ajax({ url: "receive_json_save.php", // 送信先のPHP type: "POST", // POSTで送る contentType: "Content-Type: application/json; charset=UTF-8", //必須ではなさそうだが、サーバ側との整合のために明示しておいた方がよい。 // dataType: 'json', //受信形式 必須ではなさそうだがサーバ側との整合のために明示しておいた方がよい。 data:send_data //JSON形式の送信データ }).success(function(data, status, xhr) { // 通信成功時の処理 console.log("success"); console.log("data ="+data); console.log("status ="+status); console.log("xhr ="+xhr); }).error(function(xhr, status, error) { // 通信失敗時の処理 console.log("error"); }).complete(function(xhr, status) { // 通信完了時の処理 console.log("fin"); }); }) </script>
受け取り側
<?php //-JSONデータの受信処理---------------------------------------------------// // file_get_contents()で送信データを受信(JSONの場合はここがミソ。らしい。) $json = file_get_contents("php://input"); // JSON形式データをPHPの配列型に変換 $data = json_decode($json); //-CSVへの保存処理--------------------------------------------------------// // CSV形式にするため、配列をカンマで区切り $string = implode(",", $data); // Debug用。(注意)JSON形式でHTMLへ返答する場合にはコメントアウトしなければいけない。 // $stringはJSON形式ではないのでヘッダーが違うとerorrになる。(ここではまりました) echo "<p>CSVファイルにセットされるデータ:".$string; $file_name = "001.csv"; // ファイル保存のおまじない $file = fopen($file_name, "w") or die("OPEN error $file_name"); flock($file, LOCK_EX); fputs($file, $string."\n"); flock($file, LOCK_UN); fclose($file); //-htmlへの返答する場合。-------------------------------------------------// // JSON形式で送信するためのヘッダー。これないとerorrになる。 header("Content-Type: application/json; charset=utf-8"); // JSONの書きだし print_r($json); ?>
(おまけ)csvを見る
おまけ。これを直接たたけばCSVの中身が見れる。
<?php $fname = "001.csv"; $file = fopen($fname, "r"); while(!feof($file)){ echo fgets($file, 100)."<br>"; } fclose($file); ?>
勉強になりました。
助言を頂いた皆様有難うございました。
- 作者: 西沢直木
- 出版社/メーカー: ソフトバンククリエイティブ
- 発売日: 2006/03/24
- メディア: 大型本
- 購入: 33人 クリック: 660回
- この商品を含むブログ (29件) を見る