我在 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/