【问题标题】:How to get jQuery to receive ill-formed JSON via cross-domain request?如何让 jQuery 通过跨域请求接收格式错误的 JSON?
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-04-08
    • 1970-01-01
    • 2019-01-09
    • 2011-12-23
    • 2018-01-03
    • 1970-01-01
    • 2011-01-04
    相关资源
    最近更新 更多