我知道我可以使用 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/