【问题标题】:What do browsers want for the Content-Type header on json ajax responses?浏览器对 json ajax 响应的 Content-Type 标头有什么要求?
【发布时间】:2011-03-01 10:26:04
【问题描述】:

我正在返回一些需要由 javascript 处理的 json 作为对 XMLHTTPRequest 的响应。

如果我将响应的内容类型设置为“text/plain”,除 Chrome 之外的所有浏览器都会接受它并将其传递给我的 JS,没有问题。但是,Chrome 会将响应包装在

<pre style="word-wrap: break-word; white-space: pre-wrap;"> 

在将其传递给我的 javascript 之前。

如果我将响应的内容类型设置为“正确”“应用程序/json”,所有浏览器,但 Firefox 将接受它并将其传递给我的 JS,没有问题。但是,Firefox 会要求将响应保存或打开为文件。

什么是正确的跨浏览器内容类型?

【问题讨论】:

标签: ajax json cross-browser xmlhttprequest content-type


【解决方案1】:

您可以通过使用 jQuery 函数 parseJSON - http://api.jquery.com/jQuery.parseJSON/ 将响应解析为 JSON 对象来解决此问题

您传递给函数的参数是 JSON 对象字符串,您从响应数据中提取:

function AjaxResponse (data) {  // AJAX post callback 
  var jsonResult = $.parseJSON(data.substring(data.indexOf("{"), data.lastIndexOf("}") + 1));
}

在 FF 和 IE8 中针对以下简单 JSON 结果进行了测试(除了 Chrome 解决了哪个问题),对于其他浏览器和更复杂的响应,无法保证...


注意:我认为这种情况下的内容类型是 text/plain 或 text/html - 我使用了以下 ASP.Net MVC 函数来返回结果

ContentResult System.Web.Mvc.Controller.Content(string content);

我返回 JSON 对象的位置,如

System.Web.Script.Serialization.JavaScriptSerializer jsonSerializer 
    = new System.Web.Script.Serialization.JavaScriptSerializer();
var jsonResponse = jsonSerializer.Serialize(
    new { IArticleMediaId = 0
        , ImageUrl = Url.Content(fullImgPath)
        });
return Content(jsonResponse);

【讨论】:

    【解决方案2】:

    在 ajaxFileUpload.js 中的 uploadCallback() 替换

    io.contentWindow.document.body.innerHTML.innerHTML
    

    $(io.contentWindow.document.body.innerHTML).html()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-01
      • 2016-10-18
      • 2012-02-06
      • 1970-01-01
      • 2011-06-21
      • 2015-04-17
      • 2022-06-25
      相关资源
      最近更新 更多