浏览器对 json ajax 响应的 Content-Type 标头有啥要求?
Posted
技术标签:
【中文标题】浏览器对 json ajax 响应的 Content-Type 标头有啥要求?【英文标题】: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 会要求将响应保存或打开为文件。
什么是正确的跨浏览器内容类型?
【问题讨论】:
The right JSON content type? 的可能重复项 也许吧。除了那个线程有 wrong 答案(如果你在那里使用答案,firefox 的行为就像一个任性的孩子) Firefox 的行为异常如何?如果您指的是保存和下载,请尝试此处提到的“在浏览器中打开”建议:***.com/questions/94767 已经观察到 Chrome 的这种奇怪行为。见***.com/questions/18411670/… 【参考方案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()
【讨论】:
以上是关于浏览器对 json ajax 响应的 Content-Type 标头有啥要求?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法访问serveride ajax响应作为临时文件?