Javascript 在(1)前面加上JSON对象时去掉
我发出了一个ajax get请求,但收到了一个带有while(1)的JSON对象,例如 我们刚开始这样做是为了防止恶意攻击,但我不知道如何去除它,以便正确解析JSON 下面是我用于$.get调用的函数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);
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@MikeSamuelString.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);