剥离时(1)前置于JSON对象

时间:2014-07-08 20:13:57

标签: javascript jquery ajax json frontend

我正在制作一个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);
      });
    });
}

3 个答案:

答案 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);