我可以在成功回调中评估$ .ajax()调用的响应类型吗?

时间:2008-11-14 21:16:01

标签: javascript jquery ajax

我正在使用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... :(');
            }
    }
);

3 个答案:

答案 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状态并解析结果以获取错误信息。