回答編集履歴

3

追記2

2022/08/05 06:12

投稿

退会済みユーザー
test CHANGED
@@ -61,3 +61,19 @@
61
61
  ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-04/b15932cb-ab49-4ed8-92ff-f74ba7d9d50b.jpeg)
62
62
 
63
63
  これが質問者さんが期待する動きだと思いますがいかがですか?
64
+
65
+ ---
66
+ 【追記2】
67
+
68
+ 下のコメント欄の 2022/08/05 14:58 の私のコメントで「Chrome のディベロッパーツールを使って、適当なところにブレークポイントを置いてデバックしてみることをお勧めします。後で回答欄にサンプルの画像を貼っておきます」と書いた件です。
69
+
70
+ //setTimeout(function() { window.location.href = "/home/index"; }, 3000); はコメントアウトして home/index に遷移しないようにしています。
71
+
72
+ 実行してみると、210 行に制御が飛んでくるのは最初だけで、jQuery ajax 要求に対する応答ではそこには制御は飛んでこないのが分かります。
73
+
74
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-05/83633027-af6e-4897-b4f0-dc5dfa4685bc.jpeg)
75
+
76
+ 下はその操作の要求・応答を Fiddler を使ってキャプチャしたものです。#15 は jQuery ajax による要求・応答です。もしその応答を受けて再び window.onload が発火するならば、再度 jQuery ajax に要る要求が出るはずですが、そうはなってないのが分かります。
77
+
78
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-05/86272911-9e2b-4940-bc64-59afb635331e.jpeg)
79
+

2

追記

2022/08/04 06:39

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,63 @@
1
1
  想像にすぎませんが、jQuery ajax の応答が帰ってきたとき、window.onload が再び発火するとかではないのでしょうか?
2
2
 
3
3
  その辺りを調べてみてはいかがでしょう。
4
+
5
+ ---
6
+
7
+ 【追記】
8
+
9
+ コードの内容を見てみましたが以下の部分が変です。
10
+
11
+ ```
12
+ $(function(){
13
+ $.ajax({
14
+ type: "post",
15
+ ・・・
16
+ });
17
+ ```
18
+
19
+ $(function(){ ... }); を外してみたらどうなりますか?
20
+
21
+ ・・・と言うだけでは説得力がなさそうなので自分の環境で試してみました。以下のコードで、
22
+
23
+
24
+ ```
25
+ function apiHeroesPost2() {
26
+ var j = { Id: 6, Name: "ガッチャマンの息子" };
27
+ var jsonString = JSON.stringify(j);
28
+
29
+ $.ajax({
30
+ type: "POST",
31
+ url: "/api/values",
32
+ data: jsonString,
33
+ contentType: "application/json; charset=utf-8"
34
+ })
35
+ .done (function (data) {
36
+ $('#heroes').empty();
37
+ $.each(data, function (key, val) {
38
+ var str = val.id + ': ' + val.name;
39
+ $('<li/>', { html: str }).appendTo($('#heroes'));
40
+ });
41
+
42
+ setTimeout(function() { window.location.href = "/home/index"; }, 3000);
43
+ })
44
+ .fail (function (jqXHR, textStatus, errorThrown) {
45
+ $('#heroes').empty();
46
+ $('#heroes').text('textStatus: ' + textStatus + ', errorThrown: ' + errorThrown);
47
+ })
48
+ }
49
+
50
+ window.onload = function() {
51
+ setTimeout(apiHeroesPost2, 1000);
52
+ }
53
+ ```
54
+
55
+ window.onload の setTimeout(apiHeroesPost2, 1000); で 1 秒後に jQuery ajax で API が呼ばれ、その応答を受けて done のコールバックが呼ばれて以下のように API から帰ってきた data が表示され、
56
+
57
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-04/f7597767-f59b-4e14-9679-6d2dc6ed436f.jpeg)
58
+
59
+ そのあと、setTimeout(function() { window.location.href = "/home/index"; }, 3000); で home/index 画面に遷移します。
60
+
61
+ ![イメージ説明](https://ddjkaamml8q8x.cloudfront.net/questions/2022-08-04/b15932cb-ab49-4ed8-92ff-f74ba7d9d50b.jpeg)
62
+
63
+ これが質問者さんが期待する動きだと思いますがいかがですか?

1

誤字訂正

2022/08/03 23:58

投稿

退会済みユーザー
test CHANGED
@@ -1,3 +1,3 @@
1
1
  想像にすぎませんが、jQuery ajax の応答が帰ってきたとき、window.onload が再び発火するとかではないのでしょうか?
2
2
 
3
- その辺りを調べてみては以下がでしょう。
3
+ その辺りを調べてみてはいかがでしょう。