如何确定Jquery中Ajax调用的响应类型?有时,服务器发送json响应,有时仅发送html进行显示。现在我正在使用
if(response.indexOf('Error'))
//popup error message
else
response.username
response.address
Answers:
您可以尝试如下操作:
$.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,但似乎更可靠。
xhr.getResponseHeader()
(不带参数),则会导致Cannot call method 'toLowerCase' of undefined
错误
您可以简单地使用javascript的简单方法来检查类型
即
if(typeof response=="object")
{
// Response is javascript object
}
else
{
// Response is HTML
}
如果使用此方法,则不必在成功回调中编写2个额外的参数。
"string"
那里
如果将响应解析为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解析响应。可通过jqXHR对象的responseJSON属性使已解析的JSON对象可用。
$.ajax({.., dataType: 'html'})
并且从服务器端发送了application/json
响应,但是jQuery并未填充jqXHR.responseJSON字段。
dataType: 'html'
是否知道服务器将不发送“ html”?可能指定dataType
强制jQuery使用该数据类型,从而跳过自动检测。
html
请求,symfony会以不需要的JSON格式返回表单。确实是具体情况。
上面的答案对我没有用,所以我想出了以下解决方案:
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
}}
要接受JSON回复,您可以将回复类型设置为JSON。我通常设计服务器端代码,以便它们始终返回JSON答复。如果由于某种原因未能这样做,我将因不正确的JSON格式而在AJAX调用中遇到错误,并且可以将服务器的回复处理为非JSON。
error: function(response, status, xhr){
// do something with the reply.
}