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



我正在向一个旧服务器发出请求,该服务器提供格式错误的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。(这并不是因为属性应该双引号。请参阅此处的"重要"注释。)

所以,我想我应该把响应作为dataType: 'text',清理它,然后让jQuery把它解析为JSON。然而,当我将其更改为dataType: 'text'时,我得到:

Got an error: error No transport

这是您从跨域请求中得到的。我尝试将crossDomain: true添加到请求中,并将其与text dataType一起使用,但得到了相同的错误。

有人知道我如何从跨域请求中获取这些格式错误的数据,以便对其进行清理和解析吗?

谢谢!

EDIT:dataFilter parm没有帮助,因为根本问题(当使用dataType:'jsonp'时)甚至不是格式错误的JSON字符串,而是响应不是真正的JSONp响应,即它不是函数调用。

我认为唯一可行的建议是使用您控制的中间服务器端代理。通过这种方式,您可以正确地格式化数据,并将其反馈给JavaScript。你也可以使用雅虎!管

问题是,JSONP调用实际上只是添加到DOM中的一个新脚本元素。由于同源政策,您不能请求纯文本。此外,由于服务器没有返回正确的JSON,我确信它不能处理CORS请求。因此,您将不得不使用代理。

相关内容

  • 没有找到相关文章

最新更新