希望这个标题不是太含糊不清。发生的事情是我有一个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响应
答案 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",