Javascript 在(1)前面加上JSON对象时去掉

Javascript 在(1)前面加上JSON对象时去掉,javascript,jquery,ajax,json,frontend,Javascript,Jquery,Ajax,Json,Frontend,我发出了一个ajax get请求,但收到了一个带有while(1)的JSON对象,例如 我们刚开始这样做是为了防止恶意攻击,但我不知道如何去除它,以便正确解析JSON 下面是我用于$.get调用的函数 function myFunction() { $.get('/v1/servers').success(function(data) { data.servers.forEach(function(server){ presentServer(server);

我发出了一个ajax get请求,但收到了一个带有while(1)的JSON对象,例如

我们刚开始这样做是为了防止恶意攻击,但我不知道如何去除它,以便正确解析JSON

下面是我用于$.get调用的函数

function myFunction() {
    $.get('/v1/servers').success(function(data) {
      data.servers.forEach(function(server){
        presentServer(server);
      });
    });
}
试试这个:

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);
      });
    });
}

这是标准的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);
      });
    });
}

可以使用子字符串删除前导字符:

JSON.stringify(response);
response.substring(9,response.length);

我刚刚发布了我的函数,我是否只需要添加“var json=”行?是的,您只需要添加回调的前两行,它应该正好适合.hmm,您的意思是将它传递到.get请求?我没有看到任何变化,我已经编辑了我的答案以包含您的示例代码。我忽略了提到我使用了
resp
作为初始响应,在我们预处理之后,它被解析为
数据it@MikeSamuel
String.replace()
可以接受要替换的正则表达式或值。我使用的是字符串替换,而不是正则表达式是-通常假定
string.replace
的字符串参数转换为正则表达式,但实际上
string.replace(RegExp,string)
string.replace(string,string)
非常有效differently@abmitchell,我错了。嗯,我还得等一会儿(1);{“servers”:[{“some_data”:data,“etc”:…}]}作为响应,您仍然可以将其作为响应,请确保您的变量命名正确。从ajax(“代码中的响应”)和解析对象(“数据”)返回的内容是不同的。你能用我的更改发布你的代码吗?
JSON.stringify(response);
response.substring(9,response.length);