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",