質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

11057閲覧

PHPからlocalStorageに保存したJSONを使いたい。

kumatira

総合スコア11

JSON

JSON(JavaScript Object Notation)は軽量なデータ記述言語の1つである。構文はJavaScriptをベースとしていますが、JavaScriptに限定されたものではなく、様々なソフトウェアやプログラミング言語間におけるデータの受け渡しが行えるように設計されています。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2017/01/25 11:03

編集2017/01/25 11:12

###前提・実現したいこと
webアプリケーションを作成しており、その中で、

・前ページでJSON.stringify()で文字列化しlocalstorageに保存したJSONデータ を
・本ページでlocalstorageから取り出しJSONデータとしてPHPで扱いDBに格納する

という機能を実装したいと考えております。
なお後述の通り前ページで隠しフォームを使ったやり方で実装することが出来ましたので、後学のためにこの方法がなぜいけなかったのかご教授ください。
よろしくおねがい致します。

###発生している問題

本ページで、JSONデータを変換した文字列はjavascriptを通して取得出来ているものの、この文字列をjson_decode(文字列,true) → 配列中から取り出したい値をecho しても何も帰ってこない。

###該当のソースコード

php

1<?php 2 3$script = '<script> 4 document.write(window.localStorage.getItem("key_hoge")); 5</script>'; 6echo $script; //取得したいJSONデータ文字列が表示される 7 8 9$list = json_decode( $script , true ) ; 10echo $list[0][hogehoge]; //なにも表示されない。 11echo $list; //同上 12 13 ?>

###試したこと
①localStorageにkey「key_hoge」で格納されている文字列(echo $script; で呼び出される文字列)をそのままソースにコピペして$script に代入したところ、しっかりjson_decodeされ値を取り出すことが出来た。
そのためJSON生成→変換→格納には問題がないと思われます。

②前ページで隠しフォームのvalueに文字列を入れPOSTする方法では実装することが出来た。

以上よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

PHPはサーバ上で動きます。JavaScriptはブラウザ上で動きます。
JavaScriptが実行されるときにはすでにPHPは実行し終わっています。

「localstorage の中身をAjaxでPHPに送る」が一般的な方法だと思います。

投稿2017/01/25 11:09

編集2017/01/25 11:12
kei344

総合スコア69398

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

kumatira

2017/01/25 12:04

ご回答ありがとうございました。 デコードする段階ではまだlocalstorageから読み込んでいないので、配列になっていないということですね。 次回同様の実装をする際はajaxを使いたいと思います。 参考になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問