(function (window,document) { "use strict"; var jsonp = function (url,data,callback) { // 1.將傳入的data數據轉化爲url字符串形式 // {id:1,name:'zhangsan'} => id=1&name=zhangsan var dataString = url.indexof('?') == -1? '?': '&'; for(var key in data){ dataString += key + '=' + data[key] + '&'; }; // 2 處理url中的回調函數 // cbFuncName回調函數的名字 :my_json_cb_名字的前綴 + 隨機數(把小數點去掉) var cbFuncName = 'my_json_cb_' + Math.random().toString().replace('.',''); dataString += 'callback=' + cbFuncName; // 3.建立一個script標籤並插入到頁面中 var scriptEle = document.createElement('script'); scriptEle.src = url + dataString; // 4.掛載回調函數 window[cbFuncName] = function (data) { callback(data); // 處理完回調函數的數據以後,刪除jsonp的script標籤 document.body.removeChild(scriptEle); } // 5.append到頁面中 document.body.appendChild(scriptEle); } // 由於jsonp是一個私有函數外部不能調用,全部jsonp函數做文window對象的一個方法,供外部調用 window.$jsonp = jsonp; })(window,document)