IE 9のF 12ツール、「ネットワーク」のページにサインし、「キャプチャ開始」をクリックすると、要求表示の状態が「保留」の分析と解決
3331 ワード
最近のプロジェクトでは、クライアントはjqueryでajaxリクエストを記述し、サービス側はstruts 2フレームワークを採用しています.JS送信要求とaction処理要求中に問題が発生した.最初は問題が怪しいと思っていたが、よく位置づけてからやっと問題を発見した.問題は解決したが、もっと深い原因はまだ分からない.大牛たちの指導を歓迎する.
1.問題現象クライアントの問題 IE 9の開発者ツールF 12では、ブラウザがpostリクエストを送信していることがわかりましたが、このリクエストの「結果」欄には「終了」、「イニシエータ」値には「保留」が表示されます.リクエストヘッダ、リクエストボディ、レスポンスヘッダ、レスポンスボディは空です.つまりブラウザが異常なリクエストを送信したということです.サービス側問題 Struts 2のactionはpostの要求を受け入れることができるが,要求パラメータの値は取得できない.
2.関連JSコード
3.位置決めプロセス
F 12の使用を開始したばかりで、位置決めの問題に関する情報は得られませんでした.httpWatchまたはburp suiteを使用してhttpパッケージをキャプチャし、元のhttpリクエストと応答メッセージを表示します.その結果、問題が見つかりました.
1、ブラウザからの要求メッセージには、configTypeフィールドの値が確かに渡されていません.要求メッセージは次のとおりです.
2、ブラウザは確かにサーバーの応答メッセージを受け取った.
実はすべて正常で、ブラウザは確かにHTTPリクエストを送信して、ただリクエストパラメータ値を携帯していないだけで、IE 9の展示方式にだまされただけで、位置決めを始めたばかりで長い間手がかりがありませんでした.ブラウザがajaxリクエストを送信したのに、リクエストパラメータを携帯していないのはなぜですか?なぜIE 9は要求が「保留中」、「終了済み」であることを示しているのか.
4.問題解決
NfLayoutを取り除くcloseTab();このコードで問題を解決できます.これは、jqueryのPOSTリクエストが非同期であるため、postリクエストがデータの準備ができていない場合、このときNfLayoutが実行される.closeTab();現在のページが閉じると、ブラウザがhttpリクエストを終了します.これにより、要求が異常に終了したことに相当し、IE 9は要求が「保留中」、「終了済み」であることを示す.具体的な深層の原因ははっきりしていないが、以下は個人の推測と解釈である.
1、JSコードはロードのみが実行され、jsロードがトリガーされるのはhtml/jspページの表示です.だから、Html/jspはjsの実行環境だと思います.jsがまだ実行されていない場合、ページが閉じると、後続のjs世代は実行されません.テストコードは次のとおりです.
個人的には、jqueryパッチワークのリクエスト体かもしれませんが、比較的時間がかかり、まだ実行が完了していません.このときページが閉じてJSが実行を終了し,ブラウザから不完全なHTTPリクエスト(リクエスト体が添付されていない)が1つ送信された.これは個人の推測で、みんなは自分の見解があって、指導を歓迎します.この結論に基づいて、POST要求をGet要求に変更し、IE 9は要求終了を示しているが、サービス側は要求のパラメータ値を受信することができるようになった.
1.問題現象
2.関連JSコード
function sendMessage()
{
$.post("indvAction!sendShortMsg.action", {
"configType" : "1"
});
}
//
Nf.promptConfirm({
message :”operation success”,
width : 300,
height : 150,
handler : function(btn)
{
if (btn == "ok")
{
// ajax
sendMessage()
//
NfLayout.closeTab();
}
}
});
3.位置決めプロセス
F 12の使用を開始したばかりで、位置決めの問題に関する情報は得られませんでした.httpWatchまたはburp suiteを使用してhttpパッケージをキャプチャし、元のhttpリクエストと応答メッセージを表示します.その結果、問題が見つかりました.
1、ブラウザからの要求メッセージには、configTypeフィールドの値が確かに渡されていません.要求メッセージは次のとおりです.
POST /mobile/jsp/indvconfig/indvAction!sendShortMsg.action HTTP/1.1
x-requested-with: XMLHttpRequest
Accept-Language: zh-CN,en;q=0.5
Referer: https://*.*.*.*:17243/mobile/jsp/indvconfig/indv_config.jsp
Accept: */*
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Host: 11.12.213.87:17243
Content-Length: 0
Connection: Keep-Alive
Cache-Control: no-cache
Cookie: JSESSIONID=62C9FF9CBC97731B120ABAC297C4E4C5
2、ブラウザは確かにサーバーの応答メッセージを受け取った.
HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Content-Type: text/plain;charset=UTF-8
Vary: Accept-Encoding
Date: Fri, 22 Nov 2013 01:34:31 GMT
Content-Length: 6
this is my response!
実はすべて正常で、ブラウザは確かにHTTPリクエストを送信して、ただリクエストパラメータ値を携帯していないだけで、IE 9の展示方式にだまされただけで、位置決めを始めたばかりで長い間手がかりがありませんでした.ブラウザがajaxリクエストを送信したのに、リクエストパラメータを携帯していないのはなぜですか?なぜIE 9は要求が「保留中」、「終了済み」であることを示しているのか.
4.問題解決
NfLayoutを取り除くcloseTab();このコードで問題を解決できます.これは、jqueryのPOSTリクエストが非同期であるため、postリクエストがデータの準備ができていない場合、このときNfLayoutが実行される.closeTab();現在のページが閉じると、ブラウザがhttpリクエストを終了します.これにより、要求が異常に終了したことに相当し、IE 9は要求が「保留中」、「終了済み」であることを示す.具体的な深層の原因ははっきりしていないが、以下は個人の推測と解釈である.
1、JSコードはロードのみが実行され、jsロードがトリガーされるのはhtml/jspページの表示です.だから、Html/jspはjsの実行環境だと思います.jsがまだ実行されていない場合、ページが閉じると、後続のjs世代は実行されません.テストコードは次のとおりです.
<head>
<script type='text/javascript'>
function test()
{
alert(1111);
window.opener = "";
window.open("","_self");
window.close();
alert(" , 。");
//setTimeout('callBack( )', 3000)
}
</script>
</head>
<body>
<input id="button_-12 " type="button" value="testRight" onclick="test();">
</body>
個人的には、jqueryパッチワークのリクエスト体かもしれませんが、比較的時間がかかり、まだ実行が完了していません.このときページが閉じてJSが実行を終了し,ブラウザから不完全なHTTPリクエスト(リクエスト体が添付されていない)が1つ送信された.これは個人の推測で、みんなは自分の見解があって、指導を歓迎します.この結論に基づいて、POST要求をGet要求に変更し、IE 9は要求終了を示しているが、サービス側は要求のパラメータ値を受信することができるようになった.