jquery如何检查ajax调用的响应类型

时间:2010-09-18 11:46:45

标签: jquery ajax

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

if(response.indexOf('Error'))
  //popup error message
else
 response.username
 response.address

5 个答案:

答案 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
    }
})

来自jQuery.ajax documentation

  

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

答案 4 :(得分:0)

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

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