从 jQuery.Post 获取响应内容类型

Posted

技术标签:

【中文标题】从 jQuery.Post 获取响应内容类型【英文标题】:Getting the response content-type from jQuery.Post 【发布时间】:2011-05-02 08:58:41 【问题描述】:

在使用 jQuery.Post 时有没有办法发现响应的内容类型?

我在模态窗口中有一个表单,我的想法是如果表单无效,则发送 html sn-p 并将模态的内容替换为此 sn-p,如果它是有效的我想要一个简单的字符串,其中包含 Flash 通知的内容(在 SO 上使用的类型)。

目前我正在测试返回的字符串是否以“success”开头,如果是,则使用字符串的其余部分作为 flash 通知。这显然是一个很老套的解决方案,我真的不喜欢它。

理想情况下,我希望能够对响应有条件,如果是“text/html”,则插入 sn-p,如果是“application/JSON”,那么我不仅可以发送消息对于帮助者,但可能还有其他数据(消息、id、更具体的成功/失败消息类型等),这将有助于将来扩展到其他形式。

【问题讨论】:

【参考方案1】:

jQuery 将已经 detect and convert the response based on the content type header(如果在 $.ajax() 调用中未指定 type)。例如:if it finds "json" in the content-type header, it'll be an object。你可以这样做:

$.post("myPage.html",  name: "value" , function(data) 
  if(typeof(data) === "string") 
    //html
   else 
    //JSON
  
);

或者,总是传回 JSON,并将通知消息作为其属性,例如:

$.post("myPage.html",  name: "value" , function(data) 
  if(data.notification) 
    showMessage(data.notification);
   else 
    //use the data object
  
);

【讨论】:

以上是关于从 jQuery.Post 获取响应内容类型的主要内容,如果未能解决你的问题,请参考以下文章

如何从 HttpServletResponse 获取 HTML 内容?

为啥 RestKit 会更改我的响应内容类型?

jQuery $.post 处理 JSON 响应

预检响应中的 Access-Control-Allow-Headers 不允许请求标头字段内容类型

从 curl_exec 获取响应代码、标头和内容

如何从内容处置中获取文件名