jQuery AJAX JSON dataType转换

时间:2011-03-17 21:56:49

标签: ajax jquery types jsonp

希望这个标题不是含糊不清。发生的事情是我有一个jQuery AJAX脚本,我试图用来访问远程服务器上的API,它返回一个JSON响应。但是,API将JSON作为MIME类型“text / html”(在响应头中)而不是“application / json”返回。很明显,我只需要将返回的内容类型从文本更改为JSON,以使AJAX调用正确地解释数据。

不幸的是,事实并非如此。我以多种不同的方式尝试过这种方式,但都失败了。我最接近让这个API调用工作的是调试器告诉我“资源被解释为脚本但是使用MIME类型text / html传输”。并且AJAX调用错误输出我的调试消息,它以JSON格式转储jqXHR对象,它告诉我:{"readyState":4,"status":200,"statusText":"parsererror"}

以下是我的代码示例(虽然我已经尝试了多种方式更改了代码,但是我尝试将其用于工作,但此版本似乎最接近正确):

$.ajax({
    type: 'GET',
    url: 'http://username:api-key@www.kanbanpad.com/api/v1/projects.json',
    contentType: 'application/json',
    dataType: 'jsonp',
    converters: {
        'jsonp': jQuery.parseJSON,
    },
    success: function(data) {
        alert(data);
    },
    error: function(jqXHR, textStatus, errorThrown) {
        console.log(JSON.stringify(jqXHR));
        console.log(textStatus+': '+errorThrown);
    }
});

如果有人能够弄明白我需要采取哪些不同的方式来完成这项工作,我将非常感激。

值得注意的是,如果您将API URL复制/粘贴到浏览器地址栏并点击go,它会使用正确的响应标头(“application / json”)提供正确的JSON响应

4 个答案:

答案 0 :(得分:1)

因此,除非Kanbanpad更新其API,否则无法使用JS直接访问它。您将不得不使用PHP(或其他一些)来处理请求。

它同样有效,它只需要一个额外的步骤。

仅适用于寻求解决方案的任何人。

答案 1 :(得分:0)

    dataFilter(data, type)Function
    A function to be used to handle the raw response data of XMLHttpRequest.
This is a pre-filtering
function to sanitize the response. You should return the sanitized data. The function
accepts two arguments: The raw data returned from the server and the 'dataType' parameter.

我会将dataFilter拦截器中的内容类型更改为json。请记住,这会影响所有ajax调用,因此请使用 data 中的信息来确定要转换的内容。

答案 2 :(得分:0)

验证您的服务器是否正在发送jsonp响应。这意味着json应该用你的回调字符串括起来。

回调名称在参数中传递,如果您没有明确设置,则类似于: jQuery15102810791094068532_1300988427891 (根据http://www.json-p.org/

在您的服务器上,您需要格式化响应:

jQuery15102810791094068532_1300988427891({...json response ...});

使用GET参数'callback'中定义的回调。

您可以尝试将类型设置为“json”,看看它是否有效。我和jquery的jsonp有很多parsererror - 你可以尝试http://code.google.com/p/jquery-jsonp,直到它更平滑。

答案 3 :(得分:-1)

尝试将您的内容类型更改为此

                contentType: "application/json; charset=utf-8",
相关问题