我正在使用以下代码从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不发送内容类型?

有帮助吗?

解决方案

看起来它正在发送选项请求。此问题的正常原因是当您尝试使用某个浏览器向其他域发出ajax请求时(包括firefox - 请参阅这里)不允许。

您能否澄清您提出请求的网址是否在其他域名上。如果是这种情况,您将不得不使用jsonp或使用服务器代理。

其他提示

类似的事情发生在我身上。当我用Fiddler发出相同的请求时它可以正常工作但是当我用Firefox HttpRequester解它时,它没有。所以我比较了两个请求,看起来HttpRequester更改了请求标头。我尝试了几种方法让它工作,甚至编辑了Raw请求,但是当我检查最终请求时,内容类型是如此重复:

Content-Type: application/json, application/json

它还添加了一堆其他标题。但当我检查Fiddler提出的最终请求时,它只是:

Content-Type: application/json

因此它奏效了。

我还发现有关Mozilla Firefox产品支持页面的评论抱怨类似的错误。但是我记得之前在HttpRequester中有过这样的工作,所以与最新版本有关。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top