\r\n\r\n\r\n\r\n```","answerCount":3,"upvoteCount":0,"datePublished":"2020-08-09T02:06:01.343Z","dateModified":"2020-08-09T02:10:13.225Z","acceptedAnswer":{"@type":"Answer","text":"下記で自己解決できました。\r\n\r\n\r\n\r\n\r\n","dateModified":"2020-08-09T04:15:47.667Z","datePublished":"2020-08-09T03:24:04.365Z","upvoteCount":0,"url":"https://teratail.com/questions/283516#reply-403048"},"suggestedAnswer":[{"@type":"Answer","text":"```javascript\r\n\r\n
\r\n```","dateModified":"2020-08-09T05:15:08.266Z","datePublished":"2020-08-09T05:15:08.266Z","upvoteCount":0,"url":"https://teratail.com/questions/283516#reply-403079","comment":[{"@type":"Comment","text":"有難うございます。\r\n
 で表示する方法ではなく、\r\n変数で表示する方法を探していました。\r\n(最終的にローカルストレージに格納する方針ですので、\r\nweb上で表示されるだけでは使用用途に適さない)\r\n\r\n幸い、
 で表示する方法を改造\r\nする形で、自己解決いたしました。\r\n\r\nご提案いただいた方法の改造でも行けると思います。\r\n有難うございました。","datePublished":"2020-08-09T07:24:21.374Z","dateModified":"2020-08-09T07:24:21.374Z"}]},{"@type":"Answer","text":"XMLHttpRequestは非同期なので、すぐに返答がくるわけではありません。\r\nそのため、上記コードの場合は、```document.write(\"\" +ip+\"\");```が呼ばれた後に、\r\n・```var ip = responseJson.ip;```が呼び出されているため、取り出すことが出来ないのではないでしょうか?\r\n\r\n> どうすればいいかご教示願います。\r\n\r\nやりたいこと次第なので、具体的な案は出せませんが、一番簡単なのは、```var ip = responseJson.ip;```の後ろに書く、ですかね。\r\n\r\n```\r\nxhr.onload = () => {\r\n let responseJson = JSON.parse(xhr.response);\r\n console.log(responseJson.ip);\r\n\r\n var ip = responseJson.ip;\r\n document.write(\"\" +ip+\"\");\r\n}\r\n```\r\n(ただこれだと変数を用いる意味は無くなりますが。。)","dateModified":"2020-08-09T02:20:09.354Z","datePublished":"2020-08-09T02:20:09.354Z","upvoteCount":0,"url":"https://teratail.com/questions/283516#reply-403041","comment":[{"@type":"Comment","text":"有難うございます。\r\n>(ただこれだと変数を用いる意味は無くなりますが。。)\r\nまさにこの状態になってしまいます。(IP以外表示されない)\r\n\r\nあくまで、ホームページ内でいろいろ使いまわせる変数として取り出したいというのが希望です。\r\nこのような用途は必然的に多い(というかconsole.logで終わることはないはず)\r\nはずなのですが、なぜかググった限りではconsole.logで終わっている例がしか\r\nなく困っています。\r\nよろしくお願いいたします。","datePublished":"2020-08-09T02:26:48.610Z","dateModified":"2020-08-09T02:26:48.610Z"},{"@type":"Comment","text":"1箇所訂正です。\r\n上記コードの場合は、document.write(\"\" +ip+\"\");が呼ばれた後に、\r\n・var ip = responseJson.ip;が呼び出されているため、取り出すことが出来ないのではないでしょうか?\r\n > 上記に加え、varが関数スコープ内で呼び出されているので、関数の外であるdocument.write(\"\" +ip+\"\");ではipの参照自体はできません。\r\n\r\n> ホームページ内でいろいろ使いまわせる変数として取り出したいというのが希望です。\r\nであれば単純にグローバル変数としてvar ip;を設定し、そこに代入すればいいのではないでしょうか?\r\nただ、質問文のdocument.write(\"\" +ip+\"\");の箇所では、まだipに代入がされていないので、この箇所では取得できません。","datePublished":"2020-08-09T02:37:10.968Z","dateModified":"2020-08-09T02:37:10.968Z"},{"@type":"Comment","text":"ただ、質問文のdocument.write(\"\" +ip+\"\");の箇所では、まだipに代入がされていないので、この箇所では取得できません。\r\n\r\nありがとうございます。\r\n自己解決できました。\r\nお手数をおかけいたしました。有難うございました。","datePublished":"2020-08-09T03:22:01.889Z","dateModified":"2020-08-09T03:22:01.889Z"}]}],"breadcrumb":{"@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"item":{"@id":"https://teratail.com","name":"トップ"}},{"@type":"ListItem","position":2,"item":{"@id":"https://teratail.com/tags/JavaScript","name":"JavaScriptに関する質問"}},{"@type":"ListItem","position":3,"item":{"@id":"https://teratail.com/questions/283516","name":"json形式で取得した結果のjavascript内での変数(var)表示"}}]}}}
質問するログイン新規登録

Q&A

解決済

3回答

2013閲覧

json形式で取得した結果のjavascript内での変数(var)表示

tajix_japan

総合スコア132

JavaScript

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

0グッド

0クリップ

投稿2020/08/09 02:06

編集2020/08/09 02:10

0

0

https://example.jp/ipadd.php
を叩くと、クライアント側のIPアドレスがjson形式で表示されます。
{"ip":"1XX.5X.1XX.5X"}

これをクライアント(javascript側)で変数として使用したいと考えています。

下記では、console.log には iPアドレスが表示されます。

やりたいこと
この結果を変数 var ip として取り出したいのですが、下記では取り出すことができません。

document.write("" +ip+"");
でipアドレスを表示したいのですが、どうすればいいかご教示願います。

jacascript

1 2<script> 3let xhr = new XMLHttpRequest(); 4xhr.open('GET', "https://example.jp/ipadd.php"); 5 6xhr.onload = () => { 7 let responseJson = JSON.parse(xhr.response); 8 console.log(responseJson.ip); 9 10var ip = responseJson.ip; 11} 12xhr.send(); 13</script> 14 15<script> 16document.write("" +ip+""); 17</script> 18

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

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

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

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

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

guest

回答3

0

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 var url="https://example.jp/ipadd.php" 4 fetch(url).then(res=>res.json()).then(data=>document.querySelector('#view').textContent=data.ip); 5}); 6</script> 7<div id="view"></div>

投稿2020/08/09 05:15

yambejp

総合スコア118164

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

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

tajix_japan

2020/08/09 07:24

有難うございます。 <div id="view"></div> で表示する方法ではなく、 変数で表示する方法を探していました。 (最終的にローカルストレージに格納する方針ですので、 web上で表示されるだけでは使用用途に適さない) 幸い、<div id="view"></div> で表示する方法を改造 する形で、自己解決いたしました。 ご提案いただいた方法の改造でも行けると思います。 有難うございました。
guest

0

自己解決

下記で自己解決できました。

<script type="text/javascript" src="./jquery.min.js"></script> <script> let xhr = new XMLHttpRequest(); xhr.open('GET', "https://example.jp/ipadd.php"); xhr.onload = () => { let responseJson = JSON.parse(xhr.response); console.log(responseJson.ip); $(".ipp").text(responseJson.ip); } xhr.send(); var ippp ="<a class='ipp'></a>"; </script> <script> document.write("" +ippp+""); </script>

投稿2020/08/09 03:24

編集2020/08/09 04:15
tajix_japan

総合スコア132

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

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

0

XMLHttpRequestは非同期なので、すぐに返答がくるわけではありません。
そのため、上記コードの場合は、document.write("" +ip+"");が呼ばれた後に、
var ip = responseJson.ip;が呼び出されているため、取り出すことが出来ないのではないでしょうか?

どうすればいいかご教示願います。

やりたいこと次第なので、具体的な案は出せませんが、一番簡単なのは、var ip = responseJson.ip;の後ろに書く、ですかね。

xhr.onload = () => { let responseJson = JSON.parse(xhr.response); console.log(responseJson.ip); var ip = responseJson.ip; document.write("" +ip+""); }

(ただこれだと変数を用いる意味は無くなりますが。。)

投稿2020/08/09 02:20

yuuyu

総合スコア1139

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

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

tajix_japan

2020/08/09 02:26

有難うございます。 >(ただこれだと変数を用いる意味は無くなりますが。。) まさにこの状態になってしまいます。(IP以外表示されない) あくまで、ホームページ内でいろいろ使いまわせる変数として取り出したいというのが希望です。 このような用途は必然的に多い(というかconsole.logで終わることはないはず) はずなのですが、なぜかググった限りではconsole.logで終わっている例がしか なく困っています。 よろしくお願いいたします。
yuuyu

2020/08/09 02:37

1箇所訂正です。 上記コードの場合は、document.write("" +ip+"");が呼ばれた後に、 ・var ip = responseJson.ip;が呼び出されているため、取り出すことが出来ないのではないでしょうか? > 上記に加え、varが関数スコープ内で呼び出されているので、関数の外であるdocument.write("" +ip+"");ではipの参照自体はできません。 > ホームページ内でいろいろ使いまわせる変数として取り出したいというのが希望です。 であれば単純にグローバル変数としてvar ip;を設定し、そこに代入すればいいのではないでしょうか? ただ、質問文のdocument.write("" +ip+"");の箇所では、まだipに代入がされていないので、この箇所では取得できません。
tajix_japan

2020/08/09 03:22

ただ、質問文のdocument.write("" +ip+"");の箇所では、まだipに代入がされていないので、この箇所では取得できません。 ありがとうございます。 自己解決できました。 お手数をおかけいたしました。有難うございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.29%

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

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

質問する

関連した質問