如何在Jquery中确定ajax调用的响应类型?有时,服务器发送json响应,有时它只发送html用于显示目的。现在我正在使用
if(response.indexOf('Error'))
//popup error message
else
response.username
response.address
答案 0 :(得分:121)
您可以尝试:
$.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,但似乎更可靠。
答案 1 :(得分:16)
您可以简单地使用javascript的简单方法来检查类型
即
if(typeof response=="object")
{
// Response is javascript object
}
else
{
// Response is HTML
}
如果使用此方法,则不必在成功回调中写入2个额外参数。
答案 2 :(得分:8)
上面的答案对我没有用,所以我提出了这个解决方案:
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
}}
答案 3 :(得分:8)
如果响应被解析为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
}
})
如果指定了json,则在作为对象传递给成功处理程序之前,使用jQuery.parseJSON解析响应。解析的JSON对象通过jqXHR对象的responseJSON属性提供。
答案 4 :(得分:0)
要接受JSON回复,您可以将回复类型设置为JSON。我通常设计我的服务器端代码,所以他们总是返回JSON回复。如果由于某种原因它无法这样做,我会在我的AJAX调用中因错误的JSON格式而出错,并且我可以处理来自服务器的回复,因为它不是非JSON。
error: function(response, status, xhr){
// do something with the reply.
}