【问题标题】:Firefox JQuery JSON IssueFirefox JQuery JSON 问题
【发布时间】:2009-11-26 21:26:20
【问题描述】:

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

【问题讨论】:

  • 你的action方法返回什么类型的action结果?
  • action will 方法会返回 ActionResult 包含序列化为 json 的对象(如果请求的内容类型是 application/json;默认为 charset=utf-8 或 xml。
  • 所以您使用的是内置的 JsonResult 类型,例如:return Json(objectToSerialize);
  • 是的,我使用的是内置的 JsonResult 类型的 json 和内置的 XmlSerializer 的 xml

标签: jquery json firefox tcptrace-pocketsoap


【解决方案1】:

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

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

【讨论】:

  • 感谢您的回复,但是请求是针对同一个域的。事实上,发出请求的页面和 ASP.net MVC 应用程序位于同一台服务器上。
  • 似乎不同的端口号也会在 Firefox 中触发此行为 - 我正在通过端口 80 查看 html 页面,同时使用端口 8080 (TCPTrace) 向 ASP.net MVC 应用程序发出请求.将一切都切换到 8080 就可以了!
【解决方案2】:

类似的事情也发生在我身上。当我使用 Fiddler 触发相同的请求时,它可以工作,但是当我使用 Firefox HttpRequester 触发它时,它不会。所以我比较了这两个请求,看起来 HttpRequester 更改了请求标头。我尝试了几种方法让它工作,甚至编辑了原始请求,但是当我检查最终请求时,内容类型仍然像这样重复:

Content-Type: application/json, application/json

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

Content-Type: application/json

因此它起作用了。

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

【讨论】:

    猜你喜欢
    • 2018-02-18
    • 2017-10-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多