我有一美元.数据类型设置为"json"的ajax()请求服务器返回的JSON具有正确的mime类型"application/JSON"然而,jqXHR对象中的responseText始终是一个字符串.我做错了什么?应该是这样的吗?

以下是我打电话的方式:

var options = { 
    dataType:'json',
    type: 'GET',
    url: "http://example.com/api/"
};

var key = "PassToCallback";

var jqXHRObject =  $.ajax(options).then(
    function(data, textStatus, jqXHR, key) {
        this.success(data, textStatus, jqXHR, key);
    },
    function(jqXHR, textStatus, errorThrown) { 
        this.error(jqXHR, textStatus, errorThrown);
    }
);

console.log(jqXHRObject.getResponseHeader("content-type")); // application/json
console.log(typeof jqXHRObject.responseText); // string

So I have have to do a $.parseJSON(jqXHRObject.responseText) to get an actual object. This seems unnecessary as $.ajax() should be automatically converting responseText according to the docs. Thanks!

推荐答案

I had the same problem. I returns a string because it formulated from an exception. E.g. I use a kernel listener with serialization to json on my Symfony2 project. Which is correct for proper REST headers.

Anyway, just parse it; this works for me:

$.ajaxSetup({
    "error": function(jqXHR, status, thrownError) {
        alert('error');
        var responseText = jQuery.parseJSON(jqXHR.responseText);
        console.log(responseText);
    }
});

Json相关问答推荐

中间初始化的Jolt配置

使用相同的密钥值来命名Json并使用Jolt重命名密钥

将JSON输入子数组转换为字符串顺序列表输出

如何编写MongoDB查询以返回数组数组

处理输入数据并转换为更简单的格式-PowerBI

Jolt变换将字段移动到数组的每个元素中

bash用jq获取第二条JSON记录

在 VS Code 中将一个正则表达式替换为另一个正则表达式

展平多个数组以保持顺序

Groovy JsonBuilder 在for循环中添加数组元素

jq - 将父键值提取为子元素旁边的逗号分隔值

try 使用 JQ 转换 JSON 中过于复杂的对象数组

如何实现一个通用的 serde_json::from_str

如何比较 JSON 文档并返回与 Jackson 或 Gson 的差异?

如何从 mysql 数据库构建 JSON 数组

在 JavaScript 中从 Json 数据中删除反斜杠

jQuery AJAX 和 JSON 格式

ASP.NET Core API 仅返回列表的第一个结果

Javascript:如何判断 AJAX 响应是否为 JSON

log4j 支持 JSON 格式吗?