亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何向 iTunes 搜索 API 提供回調函數

如何向 iTunes 搜索 API 提供回調函數

弒天下 2022-07-15 09:50:57
我正在努力尋找一種方法來提供回調函數以正確使用iTunes Store 搜索 API。我正在嘗試實現這種行為:const getiTunes = fetch(`https://itunes.apple.com/search?term=${search}&media=movie&limit=200`)  .then(results => results.json())  .then(results => {    if (results.errorMessage) throw Error(results.errorMessage)    else setResults(results)  })  .catch(error => {    //handle error  })到目前為止,我有這個:const getiTunes = results =>  {  if (results.errorMessage) throw Error(results.errorMessage)  else setITunes(results)}const script = document.createElement("script")script.src = `https://itunes.apple.com/search?term=${search}&media=movie&limit=200&callback=getiTunes`script.async = truedocument.body.appendChild(script)我不斷收到以下錯誤:Uncaught ReferenceError: getiTunes is not defined我也嘗試過&callback="getiTunes",&callback=${getiTunes}但他們也失敗了。useEffect這些函數在 React的鉤子中被調用。有沒有一種特定的方法我必須檢索函數名稱?在旁邊如果我嘗試不提供回調函數,它只會在搜索是新搜索時起作用(即我之前沒有搜索過該術語)。但是,如果我有(比如在生產 URL 上或本地),那么它將出現以下錯誤:Access to fetch at 'https://itunes.apple.com/search?term=spiderman&media=movie&limit=200' from origin 'http://localhost:3000' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value "--it has the last URL I used to search for this successfully--"...
查看完整描述

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)


查看完整回答
反對 回復 2022-07-15
?
慕萊塢森

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)


查看完整回答
反對 回復 2022-07-15
  • 2 回答
  • 0 關注
  • 102 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號