jquery如何检查ajax调用的响应types

我怎样才能确定JQuery中的Ajax调用的响应types? 有时,服务器发送json响应,有时它只发送html用于显示目的。 现在我正在使用

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

你可以尝试像这样:

 $.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,但似乎更可靠。

你可以简单地使用javascript的简单方法来检查types

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

如果你使用这个方法,你不必在成功callback中写入2个额外的参数。

上面的答案不适合我,所以我想出了这个解决scheme:

 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 }} 

如果响应被parsing为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.parseJSONparsing响应。 parsing的JSON对象通过jqXHR对象的responseJSON属性可用。

要接受JSON回复,可以将回复types设置为JSON。 我通常devise我的服务器端代码,所以他们总是返回JSON回复。 在这种情况下,无论出于何种原因,我都会在我的AJAX调用中得到一个错误,因为我的JSON格式不正确,而且我可以处理来自服务器的回复,因为它不是非JSON。

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