我正在制作一个ajax get请求,但收到一个前缀为while(1)的JSON对象,例如。
while(1);{"servers":[{"some_data": data, "etc":...}]}
我们刚开始这样做是为了防止恶意攻击,但我不知道如何将其删除,以便我可以正确解析JSON。
这是我用于$ .get调用的函数
function myFunction() {
$.get('/v1/servers').success(function(data) {
data.servers.forEach(function(server){
presentServer(server);
});
});
}
答案 0 :(得分:4)
试试这个:
var text = ajaxResponse.responseText;
var jsonObject = JSON.parse(text.replace('while(1);', ''));
不使用替换的另一种方法:
var jsonObject = JSON.parse(text.substring(text.indexOf(';') + 1);
更新了您的功能:
function myFunction() {
$.get('/v1/servers').success(function(response) {
var data = JSON.parse(response.responseText.substring(text.indexOf(';') + 1));
data.servers.forEach(function(server){
presentServer(server);
});
});
}
答案 1 :(得分:1)
这是标准的XSS保护功能。由于您已使用jQuery标记了问题,因此您应该能够执行此操作:
$.get('/your/api.json', function (resp) {
var json = resp.substring(resp.indexOf(";")+1)),
data = $.parseJSON(json);
// do other things
});
使用您在上面发布的代码:
function myFunction() {
$.get('/v1/servers').success(function(resp) {
var json = resp.substring(resp.indexOf(";")+1)),
data = $.parseJSON(json);
data.servers.forEach(function(server){
presentServer(server);
});
});
}
答案 2 :(得分:1)
您可以使用子字符串去除前导字符:
JSON.stringify(response);
response.substring(9,response.length);