0

我刚刚开始这个网络项目。正在使用打字稿。我正在看这个:

$.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。有什么想法吗?提前致谢。

4

2 回答 2

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);
        }
    );
于 2013-05-16T02:07:24.183 回答
0

您应该能够通过 jqXHR 对象的“responseText”属性获取 JSON 数据。下面的简短示例是使用“错误”事件执行此操作的 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);
    }
});
于 2013-05-16T02:31:09.813 回答