1、JSONP原理:就是跨域的 js程序(get請求對應url,獲取到文本數據,在script標簽中,就是按照 js 程序執行,)執行時 調用 當前程序中寫好的函數,並且把跨域的數據(即參數),傳遞過去。https://blog.csdn.net/inite/article/details/80333130
2、這里兩個js文件的 調用的函數名 和 寫好的函數名必須是一樣的。如果兩個j s 文件的對應函數名都要 同時 修改,這樣很不靈活,比較死板。跨域的js文件,通過后端程序,把調用的函數名,變成url上的參數,這樣主要前端自定義函數名就可以了。
如:php 語言,獲取到url上的回調函數參數,把這個參數值作為 調用的函數名,寫到返回的js程序中。
<?php $data = array( 'age' => 24, 'name' => '小華', 'sex' => '女' ); $callback = $_GET['callback']; // url 上設置的回調函數,作為調用的函數名。 echo $callback."(".json_encode($data).")"; // 如url上 callback=mapload,則php返回的數據就是 mapload({age:24,name:'小華',sex:'女'}) ,正是 js 的函數調用
重點:
基於JSOP的原理除了可以 解決 跨域請求數據的問題。也可以實現 js 文件執行后,再執行的功能,即異步回調的功能。高德地圖的 異步加載 js 文件,就是這么實現的。https://lbs.amap.com/api/javascript-api/guide/abc/load
window.onLoad = function(){ var map = new AMap.Map('container'); } var url = 'https://webapi.amap.com/maps?v=1.4.15&key=您申請的key值&callback=onLoad'; var jsapi = document.createElement('script'); jsapi.charset = 'utf-8'; jsapi.src = url;