我正在向服务于格式错误的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-esque响应看起来像这样:
{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
dataType一起使用,但出现了相同的错误。
任何人都知道我如何从跨域请求中获取这些格式错误的数据,以便我可以清理并解析它?
谢谢!
编辑:dataFilter
parm无效,因为根问题(使用dataType:'jsonp'
时)甚至不是格式错误的JSON字符串,而是响应不是真正的JSONp响应,也就是说,它不是函数调用。
答案 0 :(得分:1)
我认为唯一可行的建议是使用您控制的中间服务器端代理。这样,您就可以正确格式化数据并将其反馈给JavaScript。您还可以使用Yahoo! Pipe。
问题是JSONP调用实际上只是添加到DOM的新脚本元素。由于原始政策相同,您无法请求纯文本。此外,由于服务器没有返回正确的JSON,我确信它不适用于CORS请求。因此,您必须使用代理。