jquery jsonp adalah menggunakan script
标签中src
属性来解决前后端数据请求遇到的跨域问题.有一点不明白的是jquery把动态生成的script
标签追加到了head
标签中,也就是文档的头部;一般我们的回调函数在body
Fungsi diisytiharkan dahulu dan kemudian digunakan Mengapakah data yang dihantar dari latar belakang boleh diperolehi dengan memanggilnya secara terus tanpa pengisytiharan?
Ini adalah ujian yang saya lakukan:
//同源策略下有两个文件:a.html和b.js.
//a.html中的内容为:
//<script type="text/javascript" src="b.js"></script>
function test(val){
console.log(val)
}
//<script type="text/javascript" src="b.js"></script>
//b.js的内容为:
test(10)
Jika rentetan kod ini diletakkan di atas fungsi test
函数下面就会打印出数字10,如果放在test
yang diisytiharkan, ralat akan dilaporkan
ReferenceError: test is not defined
Berbanding dengan pelaksanaan jquery, saya tidak begitu faham mengapa js yang dijana secara dinamik akan dilaksanakan walaupun ia dipanggil sebelum fungsi yang diisytiharkan?
Jika ia adalah src yang dipautkan secara langsung, penyemak imbas menghuraikannya dari atas ke bawah, dan akan mendapatkan semula nilai dalam b.js dahulu Fungsi a.js belum dimuatkan ke dalam halaman, dan tiada ujian(. ) fungsi ini, jadi ralat akan dilaporkan
Tetapi apabila menghantar permintaan ajax, anda menunggu halaman selesai sebelum memintanya, anda mula-mula mengisytiharkan fungsi panggil balik dan kemudian membuat skrip untuk meminta, oleh itu, lokasi skrip pada masa ini tidak akan menjejaskan keputusan akhir.
Oleh kerana anda mengabaikan masalah tak segerak, dari segi susunan pelaksanaan, apabila teg skrip yang dihantar semula dari pelayan dimuatkan, fungsi panggil balik tempatan anda mesti ditakrifkan, jadi anda boleh memanggil kaedah yang sepadan.
Ringkasnya:
jsonp=Tentukan fungsi panggil balik setempat=>Muat teg skrip=>Jalankan kandungan teg skrip yang dimuatkan.
jsonp Secara terang-terangan, ia adalah satu perjanjian:
'Kami terlalu jauh dan tidak dapat menghubungi satu sama lain, bagaimana anda boleh memberikan barang anda kepada saya?'
'Bagaimana kalau saya membuangnya kepada anda, bolehkah anda menangkapnya ?'
'Baiklah, saya ada bakul (panggilan balik), iaitu pada kedudukan pukul 1 anda (Nama panggilan balik), anda baling ke sana sama ada bakul itu wujud atau tidak, dan sama ada ia berada di kedudukan yang betul. ia tidak menjejaskan perjanjian anda.
Lokasi pemuatan js yang diperkenalkan oleh jsonp ialah lokasi di mana pernyataan jsonp untuk mendapatkan js dilaksanakan. Mengenai penempatan, ia hanya formaliti.