teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

8

テキスト追加

2015/07/28 19:09

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -17,7 +17,7 @@
17
17
 
18
18
  AJAXを行っているコードをざっと読みました。
19
19
 
20
- while の中で、たとえば
20
+ forループの中で、たとえば
21
21
   mark_question(id, answer, 1);
22
22
   mark_question(id, answer, 2);
23
23
  の2つが、この順で呼ばれますが、それぞれの中で行っているAJAX通信での

7

テキスト追加

2015/07/28 19:09

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -96,9 +96,12 @@
96
96
  echo '{}';
97
97
  ```
98
98
 
99
- 上記のq13514-improved.htmlを作成して以下に上げました。
99
+ 上記のq13514-improved.htmlとapi.phpを作成して以下に上げました。
100
+
100
101
  [http://www.gattolibero.sakura.ne.jp/teratail/q13514-improved.html](http://www.gattolibero.sakura.ne.jp/teratail/q13514-improved.html)
101
102
 
103
+ [http://www.gattolibero.sakura.ne.jp/teratail/api.php](http://www.gattolibero.sakura.ne.jp/teratail/api.php)
104
+
102
105
  click me ! をクリックすると、AJAXのレスポンスの順番が、
103
106
  ループの順にならなくても、リストの表示としては順番に
104
107
  なります。

6

テキスト追加

2015/07/27 12:36

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -59,7 +59,7 @@
59
59
  dataType: 'json',
60
60
  success: function(json){
61
61
  console.log("ok:" + n );
62
- $('.result li:nth-child(' + n + ')').text(n);
62
+ $('.result li:nth-child(' + n + ')').text(n).css({display: 'block'});
63
63
  }
64
64
  });
65
65
  }
@@ -68,7 +68,7 @@
68
68
  {
69
69
  // まず、内容が空のリストアイテムを25個作成
70
70
  for (var i = 1; i < 26; i ++) {
71
- $('.result').append($('<li>'));
71
+ $('.result').append($('<li>').css({display: 'none'}));
72
72
  }
73
73
 
74
74
  // 25 回 AJAX を行い、回数に応じた位置の li の内容を書き換える。

5

テキスト追加

2015/07/27 12:34

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -37,7 +37,7 @@
37
37
  ちょっと応急的な手法になるかと思いますが、
38
38
  こんな方法を考えてみました。
39
39
 
40
- ・APIを呼び出す直前に、内容が空の25個の<li>を作成する。
40
+ ・APIを呼び出す直前に、内容が空の25個の<li>を作成する。
41
41
 
42
42
  ・その後、ループでAPIを呼び、呼び出し回数に応じた位置の<li>の内容を書き換える。
43
43
 

4

テキスト追加

2015/07/27 12:23

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -12,7 +12,7 @@
12
12
  javascriptのコード全体を追記して頂ければと思います。
13
13
 
14
14
  ---
15
- 追記1
15
+ **追記1**
16
16
 
17
17
 
18
18
  AJAXを行っているコードをざっと読みました。
@@ -31,8 +31,9 @@
31
31
  の順になります。
32
32
 
33
33
  ---
34
- 追記2
34
+ **追記2**
35
35
 
36
+
36
37
  ちょっと応急的な手法になるかと思いますが、
37
38
  こんな方法を考えてみました。
38
39
 

3

テキスト追加

2015/07/27 12:21

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -12,8 +12,9 @@
12
12
  javascriptのコード全体を追記して頂ければと思います。
13
13
 
14
14
  ---
15
- 追記
15
+ 追記1
16
16
 
17
+
17
18
  AJAXを行っているコードをざっと読みました。
18
19
 
19
20
  while の中で、たとえば
@@ -29,3 +30,75 @@
29
30
   <li>1</li>
30
31
  の順になります。
31
32
 
33
+ ---
34
+ 追記2
35
+
36
+ ちょっと応急的な手法になるかと思いますが、
37
+ こんな方法を考えてみました。
38
+
39
+ ・APIのを呼び出す直前に、内容が空の25個の<li>を作成する。
40
+
41
+ ・その後、ループでAPIを呼び、呼び出し回数に応じた位置の<li>の内容を書き換える。
42
+
43
+ 以下サンプルコードになります。
44
+
45
+ **q13514-improved.html**:
46
+ ```javascript
47
+ <!DOCTYPE html>
48
+ <html>
49
+ <head>
50
+ <meta charset="UTF-8">
51
+ <title>teratail/q13514-improved</title>
52
+ <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
53
+ <script>
54
+ function call_api(n) {
55
+ $.ajax({
56
+ type: 'GET',
57
+ url: 'api.php',
58
+ dataType: 'json',
59
+ success: function(json){
60
+ console.log("ok:" + n );
61
+ $('.result li:nth-child(' + n + ')').text(n);
62
+ }
63
+ });
64
+ }
65
+
66
+ function make_items()
67
+ {
68
+ // まず、内容が空のリストアイテムを25個作成
69
+ for (var i = 1; i < 26; i ++) {
70
+ $('.result').append($('<li>'));
71
+ }
72
+
73
+ // 25 回 AJAX を行い、回数に応じた位置の li の内容を書き換える。
74
+ for (var i = 1; i < 26; i ++) {
75
+ call_api(i);
76
+ }
77
+ }
78
+ </script>
79
+ </head>
80
+ <body>
81
+ <ul class="result"></ul>
82
+ <hr />
83
+ <a href="" onclick="make_items(); return(false);">click me !</a>
84
+ </body>
85
+ </html>
86
+ ```
87
+
88
+ api.php はとりあえず以下のように、空のJSONを返すだけのものです。
89
+
90
+ **api.php**:
91
+ ```php
92
+ <?php
93
+ header("Content-Type: application/json; charset=utf-8");
94
+
95
+ echo '{}';
96
+ ```
97
+
98
+ 上記のq13514-improved.htmlを作成して以下に上げました。
99
+ [http://www.gattolibero.sakura.ne.jp/teratail/q13514-improved.html](http://www.gattolibero.sakura.ne.jp/teratail/q13514-improved.html)
100
+
101
+ click me ! をクリックすると、AJAXのレスポンスの順番が、
102
+ ループの順にならなくても、リストの表示としては順番に
103
+ なります。
104
+

2

テキスト修正

2015/07/27 12:18

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -1,55 +1,9 @@
1
1
  こんにちは。
2
+
2
3
  検証のため、以下の2つのHTMLを作成しました。
3
4
 
4
- (1) **q13514-for.html**
5
- ```javascript
6
- <!DOCTYPE html>
7
- <html>
8
- <head>
9
- <meta charset="UTF-8">
10
- <title>teratail/q13514-for</title>
11
- <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
5
+ (1) [http://www.gattolibero.sakura.ne.jp/teratail/q13514-for.html](http://www.gattolibero.sakura.ne.jp/teratail/q13514-for.html)
12
- <script>
13
- $(function() {
14
- for (var i = 1; i < 26; i++) {
15
- $('.result').append('<li>' + i + '</li>');
16
- }
17
- });
18
- </script>
19
- </head>
20
- <body>
21
- <ul class="result"></ul>
22
- </body>
23
- </html>
24
- ```
25
6
 
26
- (2) **q13514-while.html**
27
- ```javascript
28
- <!DOCTYPE html>
29
- <html>
30
- <head>
31
- <meta charset="UTF-8">
32
- <title>teratail/q13514ーwhile</title>
33
- <script src="http://code.jquery.com/jquery-1.11.3.min.js"></script>
34
- <script>
35
- $(function() {
36
- var i = 1;
37
- while (i < 26) {
38
- $('.result').append('<li>' + i + '</li>');
39
- i++;
40
- }
41
- });
42
- </script>
43
- </head>
44
- <body>
45
- <ul class="result"></ul>
46
- </body>
47
- </html>
48
- ```
49
-
50
- 次に、これらを以下のURLでアクセス可能なサーバーに上げました。
51
-
52
- (1) [http://www.gattolibero.sakura.ne.jp/teratail/q13514-for.html](http://www.gattolibero.sakura.ne.jp/teratail/q13514-for.html)
53
7
  (2) [http://www.gattolibero.sakura.ne.jp/teratail/q13514-while.html](http://www.gattolibero.sakura.ne.jp/teratail/q13514-while.html)
54
8
 
55
9
  上記を表示させると分かるとおり、問題のズレは生じていないです。

1

テキスト追加

2015/07/27 11:27

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -55,4 +55,23 @@
55
55
  上記を表示させると分かるとおり、問題のズレは生じていないです。
56
56
 
57
57
  なので、問題解決のために、ループの中のAJAXも含む、HTMLと
58
- javascriptのコード全体を追記して頂ければと思います。
58
+ javascriptのコード全体を追記して頂ければと思います。
59
+
60
+ ---
61
+ 追記
62
+
63
+ AJAXを行っているコードをざっと読みました。
64
+
65
+ while の中で、たとえば
66
+  mark_question(id, answer, 1);
67
+  mark_question(id, answer, 2);
68
+ の2つが、この順で呼ばれますが、それぞれの中で行っているAJAX通信での
69
+ レスポンスが、この順で返ってくるとは限りません。
70
+ したがって、
71
+  mark_question(id, answer, 2);
72
+ でのAJAXのレスポンスが先に返ってきて処理されたら、作られる
73
+ リストアイテムは
74
+  <li>2</li>
75
+  <li>1</li>
76
+ の順になります。
77
+