javascript - 如何防止 getJSON 或类似的 ajax 请求解析为 JSON

标签 javascript jquery json ajax

我在 SO 帮助另一个用户时偶然发现了这个问题, 有一个发送 json 格式输出的网络服务,当查看控制台时似乎没问题,但在使用 getJSON 或类似的 ajax 请求直接解析它时会触发解析错误:

Unexpected token ':'. Parse error.

虽然这很奇怪,但可以通过获取纯文本来解决,但是服务器需要 JSONP 请求(它没有 CORS header )。 我尝试了很多方法来阻止 jQuery 自动解析对 JSON 的响应,但无济于事。如果有人知道如何修复看似不正确的解析错误或首先阻止解析,请告诉我。

到目前为止我尝试过的代码是:

var baseUrl = "https://acs.leagueoflegends.com/v1/stats/game/TRLH3/1001440043/timeline?gameHash=4725b07311676885&callback=?";

$.ajax({

  url: baseUrl,
  dataType: 'json',
  crossDomain: true,
  processData: false,

  converters: {"* text": window.String, "text html": true, "text json": true, "text xml": jQuery.parseXML},
  success: function(data){

    $('#output').html(data);
  },
  error:function(jqXHR,status, error){
    console.log(jqXHR);
    console.log(status);
    console.log(error);
    $('#output').html(jqXHR);
  }
});

Jsfiddle:https://jsfiddle.net/6Lwjpjmo/22/

为了让问题更清楚:
当我在 url 或数据类型 jsonp 中使用带有回调的数据类型 json 时,我可以在控制台中看到返回的 json 响应。但它会触发解析错误。
相反,如果我使用数据类型 text 或其他任何类型,我会收到跨域拒绝错误。

最佳答案

dataType 更改为文本。应该把它作为一个字符串留给你做你喜欢的事

var baseUrl = "https://acs.leagueoflegends.com/v1/stats/game/TRLH3/1001440043/timeline?gameHash=4725b07311676885&callback=?";

$.ajax({

  url: baseUrl,
  dataType: 'text',
  crossDomain: true,
  processData: false,

  converters: {"* text": window.String, "text html": true, "text json": true, "text xml": jQuery.parseXML},
  success: function(data){

    $('#output').html(data);
  },
  error:function(jqXHR,status, error){
    console.log(jqXHR);
    console.log(status);
    console.log(error);
    $('#output').html(jqXHR);
  }
});

关于javascript - 如何防止 getJSON 或类似的 ajax 请求解析为 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34207293/

相关文章:

javascript - 获取输入的小计,然后添加

javascript - 带有 Ref : Document Not Updating With Save 的 Mongo 模式

javascript - jQuery/JavaScript 日期表单验证

javascript - 单击按钮时无法重定向到新 URL

c# - JSON 反序列化异常 ('' S' 是值的无效开始)

javascript - 从扁平 JSON 中读取值

javascript - 如何正确缩小 angularJS 文件

javascript - 当创建一个只运行一次的函数时,重新定义应该在该函数之前还是之后进行?

javascript - jQuery:选择父列表项

java - Jersey 休息 : how to return interface instead of class