我刚刚开始这个网络项目。正在使用打字稿。我在看这个:
$.ajax({
type: method,
url: url,
xhrFields: {
withCredentials: $.support.cors
},
crossDomain: $.support.cors,
data: data,
dataType: (this.options.fallbackMethod ? this.options.fallbackMethod : "json")
}).then(
(data, textStatus, jqXHR) => { if (typeof (successCallback) === "function") successCallback(data, textStatus, jqXHR); },
(jqXHR, textStatus, errorThrown) => {
console.log("ajax failed: ");
console.log(errorThrown);
console.log(jqXHR);
console.log(textStatus);
if (typeof (failCallback) === "function") failCallback(jqXHR, textStatus, errorThrown);
}
);
当我们向服务器发出请求时会调用它。当我从服务器收到错误请求时,我在Firebug和Fiddler中看到,服务器正在发回一个带有错误代码(例如400)的JSON对象,以及错误消息(“找不到该资源。”) 。
我不明白的是,如何获取JSON对象以便我可以解析它。当我记录所有参数(errorThrown,jqXHR,textStatus)时,似乎没有办法让JSON回来。我只看到responseText属性,它将消息和错误代码捆绑在一个字符串中,但不是JSON对象。在调用此方法之前,我确实做了检查以确保dataType
实际上是json。有什么想法吗?提前谢谢。
答案 0 :(得分:0)
server
返回的错误始终存储在responseText
中,这正是名称所暗示的,即text
。您可以通过简单地解析responseText来解决这个问题:
$.ajax({
type: method,
url: url,
xhrFields: {
withCredentials: $.support.cors
},
crossDomain: $.support.cors,
data: data,
dataType: (this.options.fallbackMethod ? this.options.fallbackMethod : "json")
}).then(
(data, textStatus, jqXHR) => { if (typeof (successCallback) === "function") successCallback(data, textStatus, jqXHR); },
(jqXHR, textStatus, errorThrown) => {
console.log("ajax failed: ");
console.log(errorThrown);
// Parse it:
var json = $.parseJSON(jqXHR.responseText);
console.log(json)
console.log(textStatus);
if (typeof (failCallback) === "function") failCallback(jqXHR, textStatus, errorThrown);
}
);
答案 1 :(得分:0)
您应该能够通过jqXHR对象的“responseText”属性获取JSON数据。下面的简短示例是一个使用“error”事件执行此操作的ajax请求:
$.ajax({
url: 'http://somewhere...',
data: { somedata: 'somevalue' },
type: 'POST',
error: function (jqXHR, statusText, errorThrown) {
// get the JSON here:
var data = JSON.parse(jqXHR.responseText);
}
});