【发布时间】:2012-01-25 04:24:16
【问题描述】:
我正在向提供格式错误的 JSON 的旧服务器发出请求。这不是我的,所以我不能修改服务器。是跨域的。这是我的代码:
$.ajax({
url: 'http://someDomain.com/getData.htm',
dataType: 'jsonp',
error: function(jqXHR, textStatus, errorThrown) {
alert("Got an error: " + textStatus + " " + errorThrown);
},
success: function(data) {
alert("Got it: " + data);
}
});
当然,我明白了:
Got an error: parseerror Jquery12379789584794587_2893798579279874978 was not called.
所以它令人窒息,因为 JSON 式响应看起来像这样:
{name:"RMA-83186",date:"01/24/12 13:30:45"}
...而 jQuery 理所当然地要求它是格式良好的 JSON。 (这不是因为属性应该被双引号引起来。请参阅“重要”注释here。)
所以,我想我会将响应作为dataType: 'text' 带入,清理它,然后让 jQuery 将其解析为 JSON。但是,当我将其更改为 dataType: 'text' 时,我得到:
Got an error: error No transport
...这是您从跨域请求中得到的。我尝试将crossDomain: true 添加到请求中并将其与text 数据类型一起使用,但得到了同样的错误。
任何人都知道如何从跨域请求中获取这些格式错误的数据,以便我可以清理和解析它?
谢谢!
编辑:dataFilter 参数没有帮助,因为根本问题(使用 dataType:'jsonp' 时)甚至不是格式错误的 JSON 字符串,而是响应不是真正的 JSONp 响应,即它是不是函数调用。
【问题讨论】:
-
我不会将此作为您问题的答案,因为您的问题是关于 jQuery 的。但是,要解决您的问题,请在此处查看我的小提琴:jsfiddle.net/2PLb6/1 插入您的 URL 并查看它是否适合您。我们过去曾使用这种手动方法来解决问题
-
@Brent,谢谢你,但问题是不仅 JSON 格式不正确,而且它也没有以真正的 JSONp 格式返回,这将是一个函数调用。
标签: json jquery cross-domain jsonp