2 回答
TA贡献1963条经验 获得超6个赞
您正在尝试的方法是 JSONP(JSON with Padding)方法。我们只需要外部脚本和一个函数。外部网站为您的方法提供回调函数。
所以它发送函数参数中的所有数据。
错误地您已添加}到您的脚本网址
script.src = `https://itunes.apple.com/search?term=${search}&media=movie&limit=200&callback=getiTunes}`
例如代码:
const getiTunes=results=>{
if (results.errorMessage) throw new
Error(results.errorMessage)
else setITunes(results)
};
const script = document.createElement("script")
script.src = `https://itunes.apple.com/search?term=bat&media=movie&limit=200&callback=getiTunes`
script.async = true
document.body.appendChild(script);
// returns getiTunes(...someData)
TA贡献1810条经验 获得超4个赞
通过添加我的脚本来处理对文档的响应,我能够得到这个工作。
const loadItunes = document.createElement("script")
loadItunes.src = `https://itunes.apple.com/search?term=${search}&media=movie&limit=200&callback=getiTunes`
loadItunes.async = true
const handleResults = document.createElement("script")
handleResults.type = "text/javascript"
handleResults.text = "function getiTunes(response) { //function code };"
document.body.appendChild(loadItunes)
document.body.appendChild(handleResults)
更新的答案
我通过这个代码沙箱找到了更好的解决方案。它通过创建一个函数来完美地解决这个问题,然后将响应传递给回调函数。
export const fetchJSONP = (url, callback) => {
var callbackName = "jsonp_callback_" + Math.round(100000 * Math.random())
window[callbackName] = function (data) {
delete window[callbackName]
document.body.removeChild(script)
callback(data)
}
var script = document.createElement("script")
script.src = url + (url.indexOf("?") >= 0 ? "&" : "?") + "callback=" + callbackName
document.body.appendChild(script)
}
然后我以下列方式使用它:
const handleResponse = response => {
//do stuff with response
}
fetchJSONP("https://itunes.apple.com/search?term=spiderman&media=movie&limit=200", handleResponse)
添加回答
举报