我正在向一个旧服务器发出请求,该服务器提供格式错误的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请求。因此,您将不得不使用代理。