回答編集履歴

1

修正とES6構文の追記

2018/07/03 02:28

投稿

og24715
og24715

スコア832

test CHANGED
@@ -1,56 +1,6 @@
1
- おそらく以下のコードの `onload` の中と外でスコープが異なるからではないですかね。
1
+ ~~おそらく以下のコードの `onload` の中と外でスコープが異なるからではないですかね。~~
2
2
 
3
-
4
-
5
- ```js
6
-
7
- script.onload = function() {
8
-
9
- var $ = window.jQuery;
10
-
11
- obj = $.getJSON('https://yuis.xsrv.jp/cdn/dev.json', function(data) {});
12
-
13
- };
14
-
15
- document.getElementsByTagName("head")[0].appendChild(script);
16
-
17
-
18
-
19
- json = obj.responseJSON; // responseJSON is undefined!
3
+ 変数`obj`外で定義してましたね。 maisumakun さんのとおり `$.getJSON`が非同期なのが原因ですね。
20
-
21
- console.log(json.keywords) ;
22
-
23
- ```
24
-
25
-
26
-
27
- 以下のように同じスコープで実行すると正しく動作するかと思います。
28
-
29
-
30
-
31
- ```js
32
-
33
- script.onload = function() {
34
-
35
- var $ = window.jQuery;
36
-
37
- obj = $.getJSON('https://yuis.xsrv.jp/cdn/dev.json', function(data) {});
38
-
39
- json = obj.responseJSON;
40
-
41
- console.log(json.keywords) ;
42
-
43
- };
44
-
45
-
46
-
47
- ```
48
-
49
-
50
-
51
- ---
52
-
53
-
54
4
 
55
5
 
56
6
 
@@ -98,9 +48,39 @@
98
48
 
99
49
  });
100
50
 
51
+ ```
101
52
 
102
53
 
54
+
55
+ さらに async/await を使うと
56
+
57
+
58
+
59
+ ```js
60
+
61
+ const getJson = async url => {
62
+
63
+ const response = await fetch(url);
64
+
65
+ const json = await response.json();
66
+
67
+ return json;
68
+
69
+ };
70
+
71
+
72
+
73
+ const url = 'https://yuis.xsrv.jp/cdn/dev.json';
74
+
75
+ const json = getJson(url);
76
+
77
+ console.log(json);
78
+
103
79
  ```
80
+
81
+
82
+
83
+ と出来ます。
104
84
 
105
85
 
106
86