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)
添加回答
舉報