从失败的$ .ajax请求中获取json对象

时间:2013-05-16 01:07:40

标签: javascript jquery typescript

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

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

2 个答案:

答案 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);
    }
});