3 回答

TA貢獻(xiàn)1921條經(jīng)驗(yàn) 獲得超9個(gè)贊
基本上,由于相同的來源策略,您不允許通過Ajax從另一個(gè)域請(qǐng)求JSON數(shù)據(jù)。Ajax允許您在頁(yè)面加載后獲取數(shù)據(jù),然后在函數(shù)返回后執(zhí)行一些代碼/調(diào)用函數(shù)。我們不能使用Ajax,但允許注入<script>
標(biāo)記進(jìn)入我們自己的頁(yè)面,這些標(biāo)記允許引用其他域托管的腳本。
通常,您會(huì)使用它來包含來自CDN的庫(kù),例如jQuery..但是,我們可以濫用它并使用它來獲取數(shù)據(jù)!JSON已經(jīng)是有效的JavaScript(在大多數(shù)情況下),但是我們不能只在腳本文件中返回JSON,因?yàn)槲覀儫o法知道腳本/數(shù)據(jù)什么時(shí)候加載完,除非分配給變量或傳遞給函數(shù),否則我們無法訪問它。因此,我們所做的是告訴Web服務(wù)在它準(zhǔn)備好時(shí)代表我們調(diào)用一個(gè)函數(shù)。
例如,我們可能會(huì)從股票交易所API中請(qǐng)求一些數(shù)據(jù),并且與我們通常的API參數(shù)一起,我們給它一個(gè)回調(diào),如下callThisWhenReady
..然后,Web服務(wù)用我們的函數(shù)包裝數(shù)據(jù),并按如下方式返回:callThisWhenReady({...data...})
..現(xiàn)在,一旦腳本加載,瀏覽器就會(huì)嘗試執(zhí)行它(正常情況下),這反過來調(diào)用我們的任意函數(shù),并向我們提供我們想要的數(shù)據(jù)。
它的工作原理非常類似于普通的Ajax請(qǐng)求,除了調(diào)用匿名函數(shù)之外,我們還必須使用命名函數(shù)。
實(shí)際上,jQuery為您提供了無縫的支持,為您創(chuàng)建了一個(gè)唯一命名的函數(shù),并將其傳遞出去,然后它將運(yùn)行您想要的代碼。

TA貢獻(xiàn)1843條經(jīng)驗(yàn) 獲得超7個(gè)贊
添加回答
舉報(bào)