我正在使用jQuery向远程端点发出AJAX请求。如果发生故障,该端点将返回JSON对象,该对象将描述失败。如果请求成功,它将返回HTML或XML。
我看到如何在$.ajax()
调用中定义jQuery中的预期请求类型。有没有办法在success
处理程序中检测请求类型?
$.ajax(
{
type: "DELETE",
url: "/SomeEndpoint",
//dataType: "html",
data:
{
"Param2": param0val,
"Param1": param1val
},
success: function(data) {
//data could be JSON or XML/HTML
},
error: function(res, textStatus, errorThrown) {
alert('failed... :(');
}
}
);
答案 0 :(得分:4)
您的应用程序是否生成了正确的Content-Type标头(application / json,text / xml等)并在成功回调中处理这些标头。也许这样的事情会起作用吗?
xhr = $.ajax(
{
//SNIP
success: function(data) {
var ct = xhr.getResponseHeader('Content-Type');
if (ct == 'application/json') {
//deserialize as JSON and continue
} else if (ct == 'text/xml') {
//deserialize as XML and continue
}
},
//SNIP
);
未经测试,但值得一试。
答案 1 :(得分:3)
如何使用complete
选项?
$.ajax({
...
complete : function(xhr, status) {
// status is either "success" or "error"
// complete is fired after success or error functions
// xhr is the xhr object itself
var header = xhr.getResponseHeader('Content-Type');
},
...
});
答案 2 :(得分:0)
当它调用您的成功处理程序时,数据已经为您反序列化了。您需要始终为任何成功的结果返回相同的数据类型。如果确实存在错误,您应该抛出异常并让它由错误回调处理。这应该能够解析生成的错误并将其打包为您的回调,也就是说,它将检测到响应没有200 OK状态并解析结果以获取错误信息。