javascript - 是否有正确的方法来解析 JavaScript 中以循环开头的 JSON?

标签 javascript json

我知道我可以使用 jQuery 和其他库来轻松处理这个问题,但我个人想知道处理这些响应的最佳方法。我花了大量时间寻找处理它们的正确方法,但我发现的只是对它们存在原因的相同解释:反劫持。

所以,标题本身就说明了一切。我知道一个非常常见的实现利用了 while 循环的前置,可以使用 .replace(/^while\(\d*\);/, '')< 来处理,但这感觉像是一种粗暴和黑客的处理方式,而且它只考虑了一种可能的变化。

有没有更好的处理方法?

尽量保持简单,一个例子是:

var oReq = new XMLHttpRequest();
oReq.addEventListener("load", function() {
    console.log(this.responseText);
});
oReq.open("GET", "http://www.example.org/example.json");
oReq.send();

这可能会产生如下响应:

while(1);{"menu":{"id":"file","value":"File","popup":{"menuitem":[{"value":"New","onclick":"CreateNewDoc()"},{"value":"Open","onclick":"OpenDoc()"},{"value":"Close","onclick":"CloseDoc()"}]}}}

最佳答案

this feels like a crude and hackish way to handle it and it only accounts for one possible variation.

不,这正是您要做的。或者甚至更不通用,.slice(9)。服务器不会预先考虑任意甚至动态生成的循环,它们使用最短/最简单的可能 to prevent JSON hijacking 。因此,您只需处理您所请求的服务使用的特定前缀。

关于javascript - 是否有正确的方法来解析 JavaScript 中以循环开头的 JSON?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52668521/

相关文章:

javascript - D3 : cannot load json data from database using PHP

java - 在反序列化方法中,如何找到当前正在反序列化的字段( token )的父级?

java - 如何将文件夹和子文件夹列表转换为 JSOn 格式

javascript - 当对象值的条件大于 5 时输出对象键

javascript - 封闭件损坏 - 请帮我修复它

javascript - Bootstrap 4 Beta 2 导航栏切换器不工作

javascript - 如何设置函数的 this 值?

json - 使用Android Studio 3.0时如何存储json数据?

javascript - 如何使用 angular.js $http 服务在 PHP 后端 API 中实现 'hit' 特定功能?

java - jackson :反序列化为每个值都具有正确类型的 Map<String, Object>