2012-01-13 23 views
1

私たちは、MVC 3 Webサイトのいくつかのページでサーバーデータを要求するためにjQuery.ajax()メソッドを使用しています。これらのリクエストは常に 'POST' ajaxパラメータタイプでマークされ、通常はページの読み込み時やタイマーで呼び出されます。つまり、ユーザーアクション(マウスクリックなど)の結果ではありません。IEを使用したjQuery GETとPOST

我々は(ELMAH)エラーログを見てみると次のように我々はエントリ数を参照してください。

パブリックアクションメソッド「GetMessageStatsが」コントローラ「Inbox.WebUI.Areas.Applicationで見つかりませんでした。コントローラー.StatusController '。

コントローラの動作に[HttpPost]とマークされています。

[HttpPost] 
public JsonResult GetMessageStats() 
{ 
    MessageStatsViewModel model = new MessageStatsViewModel 
    { 
     TotalNoMessages = MailDB.GetMessageCount(), 
     MessagesInQueue = MailDB.GetQueueLength() 
    }; 

    return Json(model); 
} 

、ここで呼び出すクライアントスクリプトです:調査に

$(function() { 
    var $totalMessages = $("#total-messages"), 
     $queuedMessages = $("#queued-messages"); 

    function getStats() { 
     $.ajax({ 
     type: "POST", 
     url: "/Application/Status/GetMessageStats", 
     dataType: "json", 
     cache: false, 
     success: function (data) { 
      $totalMessages.text(data.TotalNoMessages); 
      $queuedMessages.text(data.MessagesInQueue); 
      setTimeout(function() { 
       getStats(); 
      }, 15000); 
     }, 
     error: function (xmlHttpRequest, errorMessage, exception) { 
      throw errorMessage; 
     } 
     }); 
    } 

    getStats(); 

}); 

一部のブラウザ(IE7/IE8、多分他の人が)必要なPOSTに加えて、GET要求を発行するように見えることが表示されます要求。これらのブラウザの下でユーザーインターフェイスが正しく応答して動作するため、POST要求が処理されていることに注意してください。 ELMAHのようにユーザーエージェントを報告している

のMozilla/4.0(; MSIE 6.0; Windows互換NT 5.1)

誰がこの問題を見ていますか?もしそうなら、それを避ける方法を見つけましたか?

ありがとうございました。

+3

クライアントコードを表示してください。これは、これが起こる場所です。 –

+0

Diodeusとは何ですか?これは、おそらくクライアントコードの問題です。 – Etch

+0

これらのGETリクエストの詳細については、サーバーのHTTPログを参照してください。彼らはPOSTの前または後に行われ、どのUserAgentが使用されていますか? – Stefan

答えて

3

は、再:余計GET、私は「チェック」だろうが、彼らは有効であったことを確認するためのURLいくつかのツールバー/セキュリティサービスがあったことがわかりました。私はそれがトレンドマイクロのウェブサイトでトラストタイプのプラグインを持っていたと信じています。

$ .post()のような簡略化されたajaxメソッドを使ってみましたか?また、データを取得している場合、POSTが必要な特定の理由はありますか?

Fiddlerまたは選択したツールを使用してリクエストを生成する場合、レスポンスに同じエラーが発生しますか?

+0

こんにちはJohn、フィドラーを試しましたが、IE6、IE7、IE8、IE9を試しても問題を再現できませんFirefoxとChrome。あなたが示唆するように、私の疑惑は、この問題がいくつかの追加のブラウザプラグインによって引き起こされているということです。 URL自体は、この1つのスクリプトからのみ参照されます。たとえ単純なクエリパラメータであっても、サーバーにデータを送信したいときはいつでもPOSTを使用する傾向があります。上記の例では、GETも同様に使用できます。私は何か違いがあるかどうかを見るために$ .post()を試みます。おかげさまでお手伝いします – Neilski

+0

「TrendMicro」は私にとって大きな恋愛物語です。 (皮肉なことがありますか?) –

+0

こんにちはジョン、あなたの元々の疑惑は正しいです。我々は別の「ロックダウンされた」ウェブサイトを見て、同じ問題を見た。より制御された環境であるため、エラーを特定するのが簡単で、推測したように、Trend Micro Titanium Internet Security 2012を実行しているユーザーが原因でした。あなたの助けてくれてありがとう - 私はあなたに感謝の象徴として奨励金を授与しました。残っている唯一の問題は、これらのエラーを管理する方法です - 私はそれを無視しますか? – Neilski

0

明らかに、これは、URLを変更してGETパラメータを追加する別の関数がある場合に発生します。その場合、IEはGET要求とPOST要求の両方を送信する傾向があります。

機能は、おそらくAJAXリクエストが送信される前に呼び出されたjQueryの機能である「ajaxSend」である可能性があります。

解決策は、URLを直接変更するのではなく、要求に必要な余分なパラメータを渡すことです。

から撮影情報:それは価値がある何のため http://www.justinball.com/2009/07/08/jquery-ajax-get-in-firefox-post-in-internet-explorer/

+0

これは同じ問題であるかどうかはわかりません。余計なGETリクエストがあります(ただし、ajax type = 'POST'を指定しています)。また、URLを変更したりデータを渡したりしていませんでした。これは単なる静的リンクです。 – Neilski

+0

Webサーバーのログを調べて、要求に要求パラメータがないことを確認できますか? – Danack

+0

ログを確認して、追加のGETリクエストでリクエストパラメータが表示されていないことを確認できます – Neilski

0

JavaScriptコードで使用している方法は、GETメソッドです。コントローラアクションメソッドから[HttpPost]を削除してみてください。

またはそれをポストメソッドにするには、このように投稿データを渡します。

url: "/Application/Status/GetMessageStats", 
data: {}, 
dataType: "json", 

これを試してください。テストされていません..

+0

こんにちはSunilさん、元の投稿を見直すと、$ .ajax()呼び出しがtype = 'POST'というパラメータで修飾されていることがわかります。 jQueryのドキュメントによれば、これはデフォルトの 'GET'を 'POST'に置き換えるべきです。コントローラから[HttpPost]属性を削除することでエラーを取り除くことができてうれしいですが、これがポイントではありません。私が確立しようとしているのは、コードが呼び出されないときにGETがどのように開始されるかです。昨日、250ページのリクエストのうち、擬似GETは19回しか見られませんでした。 – Neilski

0

私は一度同様の問題を抱えていました。私にとっての解決策は、別の設定値を追加することでした:jQuery ajax呼び出しに

processData: false 

を追加することでした。

関連する問題