jQuery AJAX JSON数据类型转换

希望这个头衔不是神秘。 发生的事情是我有一个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响应

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

它的工作原理同样如此,它只需要一个额外的步骤。

适合那些正在寻找解决方案的人。

  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调用,因此请使用数据中的信息来决定要转换的数据。

validation您的服务器是否正在发送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,直到它有点平滑。

尝试将内容类型更改为此

  contentType: "application/json; charset=utf-8",