我正在使用 Adobe Scene7 媒体服务器,它烦人地将图像数据对象返回为 JSONP,带有注释和包装功能。
我.fetch()
用来发出请求并希望从响应中获取一些数据。
点击 URL 会返回以下响应结构:
/*jsonp*/
s7jsonResponse({
"set": { /* image data here */ }},
"aCustomPassedIdentifier"
);
我只关心object
返回的,s7jsonResponse()
但我正在努力弄清楚如何最好地解析这个 JSONP。
目前,我text()
在理想情况下从响应中得到json()
fetch(url)
.then((response) => response.text())
然后使用响应文本,我必须使用它str.replace
来去除必要的注释和包装功能:
fetch(url)
.then((response) => response.text())
.then((data) => {
data = data
.replace("/*jsonp*/", "")
.replace("s7jsonResponse(", "")
.replace(',"aCustomPassedIdentifier");', "")
})
最后我可以将剩余的文本解析为 JSON:
fetch(url)
.then((response) => response.text())
.then((data) => {
data = JSON.parse(data
.replace("/*jsonp*/", "")
.replace("s7jsonResponse(", "")
.replace(',"aCustomPassedIdentifier");', "")
)
})
这感觉就像是一种令人难以置信的 hacky 方式来获得我需要的东西。有没有更好的办法?有没有我可以调用的替代方法response
,以便在没有额外内容的情况下仅访问 JSON?