回答編集履歴

2

補足の追加。

2016/08/01 08:49

投稿

kei344
kei344

スコア69407

test CHANGED
@@ -3,3 +3,107 @@
3
3
 
4
4
 
5
5
  また、`document.write` は記述場所と実行タイミングによって描画位置が変わる場合があるため、今回のコードであれば `"</table>"` の後に `"<tr><td>"・・・` が出力される可能性があります。
6
+
7
+
8
+
9
+ ---
10
+
11
+
12
+
13
+ **追記:**
14
+
15
+
16
+
17
+ 未テストですが、書くならこういう感じという参考になれば幸いです。
18
+
19
+ `for` の中の `var` を削除したのは、`for` は `var` ではスコープを持たないためです。(letなら意図通りになるかも)
20
+
21
+
22
+
23
+ ```JavaScript
24
+
25
+ var $body = document.querySelector( 'body' );
26
+
27
+ // tableをbodyに追加
28
+
29
+ $body.insertAdjacentHTML( 'beforeend', '<table border="3" id="my_table"><tr bgcolor="Aqua"><th>DUMY SERVER</th><th>STATUS</th></tr></table>' );
30
+
31
+ var $table = document.getElementById( 'my_table' );
32
+
33
+ var ip = 10;
34
+
35
+ var i, url, server;
36
+
37
+ for ( i = 1 ; i <= max ; i++) {
38
+
39
+ ip++;
40
+
41
+ url = base_url + ip;
42
+
43
+ server = 'SAVEDUMY' + i;
44
+
45
+ ( function () {
46
+
47
+ var xhr = new XMLHttpRequest();
48
+
49
+ xhr.open( 'GET', url, true );
50
+
51
+ xhr.onreadystatechange = function() { // ここの中で server などの変数を使うために即時関数を利用しています。
52
+
53
+ var result, bg_color;
54
+
55
+ console.log( xhr.status );
56
+
57
+ if ( xhr.readyState === 4 && xhr.status === 200 ) {
58
+
59
+ result = 'OK';
60
+
61
+ bg_color = 'Lime';
62
+
63
+ } else {
64
+
65
+ result = 'NG';
66
+
67
+ bg_color = 'Red';
68
+
69
+ }
70
+
71
+ // tableに行を追加
72
+
73
+ $table.insertAdjacentHTML( '<tr><td>' + server + '</td><td style="background-color:' + bg_color + ';">' + result + '</td></tr>' );
74
+
75
+ };
76
+
77
+ xhr.send();
78
+
79
+ } )( url, server ); // 即時関数
80
+
81
+ }
82
+
83
+ ```
84
+
85
+
86
+
87
+ 【JavaScriptのスコープとクロージャとletステートメント - Qiita】
88
+
89
+ [http://qiita.com/yaegaki/items/704f547afca7a09ad131](http://qiita.com/yaegaki/items/704f547afca7a09ad131)
90
+
91
+
92
+
93
+ 【JavaScriptで即時関数を使う理由 - Qiita】
94
+
95
+ [http://qiita.com/katsukii/items/cfe9fd968ba0db603b1e](http://qiita.com/katsukii/items/cfe9fd968ba0db603b1e)
96
+
97
+
98
+
99
+ 【document . writeはやめて、innerHTMLを使おう | Web Developers Antenna ?ウェブ開発者アンテナ? [W'ANEB]】
100
+
101
+ [http://web.antenna.work/innerhtml/](http://web.antenna.work/innerhtml/)
102
+
103
+
104
+
105
+ 【innerHTMLの代わりにinsertAdjacentHTML()を使ってみようか。(DOMおれおれAdvent Calendar 2015 ? 01日目) | Ginpen.com】
106
+
107
+ [http://ginpen.com/2015/12/01/insertadjacenthtml-instead-of-innerhtml/](http://ginpen.com/2015/12/01/insertadjacenthtml-instead-of-innerhtml/)
108
+
109
+

1

読みやすく修正。

2016/08/01 08:49

投稿

kei344
kei344

スコア69407

test CHANGED
@@ -1,5 +1,5 @@
1
- XMLHttpRequest は非同期通信なので、onreadystatechangeを定義した直後の document.write は高確率でundifinedになります。描画処理はonreadystatechangeに代入している関数内で行うのが良いでしょう。
1
+ `XMLHttpRequest` は非同期通信なので、`onreadystatechange` を定義した直後の `document.write` は高確率で `undifined` になります。描画処理は `onreadystatechange` に代入している関数内で行うのが良いでしょう。
2
2
 
3
3
 
4
4
 
5
- また、document.write は記述場所と実行タイミングによって描画位置が変わる場合があるため、今回のコードであれば "</table>" の後に "<tr><td>"・・・ が出力される可能性があります。
5
+ また、`document.write` は記述場所と実行タイミングによって描画位置が変わる場合があるため、今回のコードであれば `"</table>"` の後に `"<tr><td>"・・・` が出力される可能性があります。