2009-11-26 92 views
1

我正在使用以下代碼從ASP.net MVC應用程序請求數據。我也使用TcpTrace,以便我可以看到請求/響應。Firefox JQuery JSON問題

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不發送內容類型?

+0

您的操作方法返回什麼類型的操作結果? – 2009-11-26 21:30:06

+0

action方法將返回包含序列化爲json的ActionResult對象(如果請求的內容類型爲application/json; charset = utf-8或xml作爲默認值 – markpirvine 2009-11-27 09:15:37

+0

因此,您正在使用內置的JsonResult類型,例如:返回Json(objectToSerialize); – 2009-11-27 10:17:42

回答

1

它看起來像是發送選項請求。這個問題的正常原因是當你試圖使用某個瀏覽器(包括firefox - 參見here)不允許的情況下向另一個域發出ajax請求時。

你能否澄清一下你提出請求的網址是否在另一個域名上。如果是這種情況,您將不得不使用jsonp或使用服務器代理。

+0

感謝您的答覆,但是請求是對同一個域。這個ASP.net MVC應用程序位於同一臺服務器上 – markpirvine 2009-11-27 09:17:27

+0

似乎不同的端口號也會在Firefox中引發這種行爲 - 我正在通過端口80查看html頁面,同時使用端口8080(TCPTrace)向ASP.net MVC應用程序切換到8080的一切工作! – markpirvine 2009-11-27 09:45:10

+0

是的,不同的端口被認爲是X域! – redsquare 2009-11-27 14:04:29

0

類似的事情正在發生在我身上。當我用Fiddler發起同樣的請求時,它可以工作,但是當我用Firefox HttpRequester發起它時,它不會。所以我比較了這兩個請求,看起來像HttpRequester更改了請求標頭。我嘗試了幾種方法來得到它的工作,甚至編輯的原始的請求,但仍當我檢查的最終請求內容類型被複制,像這樣:

Content-Type: application/json, application/json 

而且還增加了很多其他的頭。但是當我檢查了提琴手提出的最終請求時,它只是:

Content-Type: application/json 

因此它的工作。

我還在Mozilla Firefox產品支持頁面上發現了類似bug的評論。但我記得之前在HttpRequester中工作過,所以與最新版本有關。