Firefox JQuery JSONの問題
-
05-07-2019 - |
質問
次のコードを使用して、ASP.net MVCアプリケーションからデータを要求しています。また、リクエスト/レスポンスを確認できるようにTcpTraceを使用しています。
if (isInteger($('#txtDay').val()) && isInteger($('#txtMonth').val()) && isInteger($('#txtYear').val())) {
$.ajax({
type: 'POST',
contentType: 'application/json; charset=utf-8',
url: strApi + 'wip/job/getsummary/' + $('#txtYear').val() + '/' + $('#txtMonth').val() + '/' + $('#txtDay').val(),
data: '{}',
dataType: 'json',
cache: false,
beforeSend: function(XMLHttpRequest) { ShowLoading(); },
success: function(data, textStatus) {
ShowJobSummaryList(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
HideLoading();
ShowStatus('unable to retrieve job summary list');
alert(XMLHttpRequest.statusText);
alert(textStatus);
},
complete: function(XMLHttpRequest, textStatus) {
HideLoading();
}
});
}
IEを使用すると、すべてが正常に機能します-コンテンツタイプはapplication / jsonに正しく設定されます。ただし、Firefox 3.5.5では、コンテンツタイプがありません:
OPTIONS /api/wip/job/getsummary/2009/11/25 HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-GB; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-gb,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Origin: http://localhost
Access-Control-Request-Method: POST
Access-Control-Request-Headers: x-requested-with
これにより、ASP.net MVCはXMLを返します。 Firefoxがコンテンツタイプを送信しない理由を説明できますか?
解決
オプションリクエストを送信しているようです。この問題の通常の原因は、特定のブラウザ(firefoxを含む-ここ)は許可しません。
リクエストを行うURLが別のドメインにあるかどうかを明確にできますか。この場合、jsonpを使用するか、サーバープロキシを使用する必要があります。
他のヒント
同様のことが起こっています。 Fiddlerで同じリクエストを実行すると動作しますが、Firefox HttpRequesterで実行すると動作しません。両方のリクエストを比較したところ、HttpRequesterがリクエストヘッダーを変更しているようです。私はそれを動作させるためにいくつかの方法を試し、Rawリクエストを編集しましたが、最終的なリクエストをチェックすると、コンテンツタイプは次のように複製されます:
Content-Type: application/json, application/json
そして、他のヘッダーも多数追加します。しかし、Fiddlerが行った最終リクエストを確認したところ、次のようになりました。
Content-Type: application/json
そしてそれはそれで働きました。
Mozilla Firefox製品サポートページでも、同様のバグを訴えるレビューを見つけました。ただし、これは以前HttpRequesterで機能していたため、最新バージョンと関係があることを覚えています。