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

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

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

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

1回答

1475閲覧

グローバルオブジェクトに仕込んだ連想配列を取得したいのですが・・・

true

総合スコア440

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2015/09/05 01:53

いつもありがとうございます。
いま、オンロード時にAjax経由で適当な連想配列を取得し、JS側で適当な配列に格納します。配列の中身は個々のオブジェクトになるかと思います[object, object・・・]の形)。
そして、オンロード時にたとえばクリックボタンを生成し、それをクリックしたときにそのオブジェクトにアクセスしたいのですがうまくいきません。
具体的なテストコードは以下の通りです。

環境:centos6.6 ,php5.4.36, chrome 最新版

test.php <?php if (isset($_GET["func"]) && $_GET["func"] == "init") { $array = [["category" => "和食", "food" => "寿司"], ["category" => "洋食", "food" => "オムライス"]]; $json = json_encode($array); echo $json; exit(); } ?> <html> <head> <meta charset="utf-8"> <script type="text/javascript"> var Ajax = new XMLHttpRequest(); var menu = ""; window.onload = function() { var url = "test.php" + "?dummy=" + new Date().getTime() + "&func=" + "init"; Ajax.open("GET", url, true); Ajax.send(null); Ajax.onreadystatechange = function() { if (Ajax.readyState == 4 && Ajax.status == 200) { this.menu = JSON.parse(Ajax.responseText); alert(this.menu[1].food+"お願いします!"); var out = "<input type='button' onclick='moppen();' value='もっぺん叫ぶ'>"; document.getElementById("result").innerHTML = out; } } } function moppen() { alert(this.menu[1].food+"お願いします!"); // ここがうまく動かない } </script> </head> <body> <div id="result"></div> </body> </html>

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

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

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

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

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

guest

回答1

0

ベストアンサー

onreadystatechange内のthisと、moppen()内でのthisが一致していないため、受け渡しがうまくいかないようです。

意味もなくグローバルオブジェクトを介するのではなく、外側でvar menu;としてグローバル宣言をして、単にmenuとして参照するのが妥当な解決策です。

投稿2015/09/05 02:55

maisumakun

総合スコア145183

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

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

true

2015/09/05 03:33

ありがとうございます。どうも最初のthis.menu=によって外側で定義したvar menuにデータを格納しているつもりだったのですが、そこは単にmenu=として、上書きする形を取らないとダメみたいですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問