牧羊人nacy
2018-11-14 14:14:31
jquery jsonp的原理就是借助script標(biāo)簽中src屬性來解決前后端數(shù)據(jù)請求遇到的跨域問題.有一點(diǎn)不明白的是jquery把動(dòng)態(tài)生成的script標(biāo)簽追加到了head標(biāo)簽中,也就是文檔的頭部;一般我們的回調(diào)函數(shù)在body中,函數(shù)先聲明后使用,沒有聲明就直接調(diào)用為什么也能獲取到后臺傳過來的數(shù)據(jù)呢?下面是我做的一個(gè)測試://同源策略下有兩個(gè)文件:a.html和b.js.//a.html中的內(nèi)容為://<script type="text/javascript" src="b.js"></script>function test(val){ console.log(val)}//<script type="text/javascript" src="b.js"></script>//b.js的內(nèi)容為:test(10)這串代碼放在已經(jīng)聲明的test函數(shù)下面就會打印出數(shù)字10,如果放在test函數(shù)上面就報(bào)錯(cuò)了ReferenceError: test is not defined對比jquery的實(shí)現(xiàn)方式我不是太理解為什么動(dòng)態(tài)生成的js放在已經(jīng)聲明的函數(shù)之前調(diào)用也會執(zhí)行?
1 回答
一只名叫tom的貓
TA貢獻(xiàn)1906條經(jīng)驗(yàn) 獲得超3個(gè)贊
//同源策略下有兩個(gè)文件:a.html和b.js.
//a.html中的內(nèi)容為:
//<script type="text/javascript" src="b.js"></script>
function test(val){
console.log(val)
}
//<script type="text/javascript" src="b.js"></script>
//b.js的內(nèi)容為:
test(10)
如果是直接鏈入的src的話,瀏覽器解析是從上往下解析的,就會先取回b.js里面的值,a.js的函數(shù)還未加載進(jìn)入頁面,此時(shí)是沒有test()這個(gè)函數(shù)的,所以會報(bào)錯(cuò)
但是發(fā)ajax請求是等頁面完成后再去請求的,即等是先聲明好了一個(gè)回調(diào)函數(shù)再去 創(chuàng)建一個(gè)script去請求,所以此時(shí)的script放的位置在哪里并不會影響最后的結(jié)果。
添加回答
舉報(bào)
0/150
提交
取消
