Jquery 如何检查 Ajax 调用的响应类型

如何确定 Jquery 中 ajax 调用的响应类型?有时,服务器发送 json 响应,有时它只发送用于显示目的的 html。现在我正在吸毒

if(response.indexOf('Error'))
//popup error message
else
response.username
response.address
79145 次浏览

你可以这样试试:

$.ajax({
type: "POST",
url: "your url goes here",
data: "data to be sent",
success: function(response, status, xhr){
var ct = xhr.getResponseHeader("content-type") || "";
if (ct.indexOf('html') > -1) {
//do something
}
if (ct.indexOf('json') > -1) {
// handle json here
}
}
});

基本上它也使用 indexOf,但似乎更可靠。

要接受 JSON 应答,可以将应答类型设置为 JSON。我通常设计我的服务器端代码,所以他们总是返回 JSON 应答。如果由于某种原因它无法这样做,我将在 AJAX 调用中得到错误的 JSON 格式,并且我可以将来自服务器的答复处理为非 JSON 格式。

error: function(response, status, xhr){
// do something with the reply.
}

上面的答案对我不起作用,所以我想出了这个解决方案:

success: function(data, textStatus , xhr) {
if(xhr.responseXML.contentType == "text/html") {
//do something with html
}
else if(xhr.responseXML.contentType == "application/json") {
//do something with json
}}

您可以简单地使用 javascript 的简单方法来检查类型

也就是说。

if(typeof response=="object")
{
// Response is javascript object
}
else
{
// Response is HTML
}

如果使用此方法,则不必在成功回调中编写2个额外参数。

如果将响应解析为 JSON,则 jqXHR对象将具有 responseJSON属性。

$.ajax(
// ...
).done(function(data, textStatus, jqXHR) {
if (jqXHR.responseJSON) {
// handle JSON
} else {
// handle html
}
}).fail(function(jqXHR, textStatus, errorThrown) {
if (jqXHR.responseJSON) {
// handle JSON
else {
// handle html
}
})

来自 JQuery. ajax 文档:

如果指定了 json,则在将响应作为对象传递给成功处理程序之前,使用 jQuery.parseJSON 解析响应。解析后的 JSON 对象通过 jqXHR 对象的 responseJSON 属性可用。