如何让jQuery通过跨域请求接收格式错误的JSON?

时间:2012-01-24 19:41:37

标签: json jquery cross-domain jsonp

我正在向服务于格式错误的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响应,也就是说,它不是函数调用。

1 个答案:

答案 0 :(得分:1)

我认为唯一可行的建议是使用您控制的中间服务器端代理。这样,您就可以正确格式化数据并将其反馈给JavaScript。您还可以使用Yahoo! Pipe

问题是JSONP调用实际上只是添加到DOM的新脚本元素。由于原始政策相同,您无法请求纯文本。此外,由于服务器没有返回正确的JSON,我确信它不适用于CORS请求。因此,您必须使用代理。