摘要:最近公司要跨域請求一個服務,服務未啟動的時候還要報錯。自己做了一個以符合業務需求貼上源碼希望大家能多多提意見給賦函數的時候沒有采取一個請求一個函數是因為后臺服務參數沒有函數名稱
最近公司要跨域請求一個服務,服務未啟動的時候還要報錯。自己做了一個以符合業務需求 貼上源碼: 希望大家能多多提意見 /**
v 1.0
author xingzheng
date 2018-12-19
*/
var JSONP = {
now : function() { return (new Date()).getTime(); }, rand : function() { return Math.random().toString().substr(2); }, waitPostArr:[], currentNodeName: "", removeElem : function(elem) { try{ var parent = elem.parentNode; if (parent && parent.nodeType !== 11) { parent.removeChild(elem); } }catch(e){ console.log(e); } }, parseData : function(data) { var ret = ""; if (typeof data === "string") { ret = data; } else if (typeof data === "object") { for ( var key in data) { ret += "&" + key + "=" + encodeURIComponent(data[key]); } } ret += "&_time=" + this.now(); ret = ret.substr(1); return ret; }, getJSONS : function(arr){ this.waitPostArr = arr; this.getJSON(arr[0].url, arr[0].data, arr[0].func); this.waitPostArr.splice(0, 1); }, getJSON : function(url, data, func) { var name; if(url.url){ url = url + (url.url.indexOf("?") === -1 ? "?" : "&") + this.parseData(data); }else{ url = url + (url.indexOf("?") === -1 ? "?" : "&") + this.parseData(data); } var match = /callback=(w+)/.exec(url); if (match && match[1]) { name = match[1]; } else { name = "jsonp_" + this.now() + "_" + this.rand(); url = url.replace("callback=?", "callback=" + name); url = url.replace("callback=%3F", "callback=" + name); } var script = document.createElement("script"); script.type = "text/javascript"; script.src = url; script.id = "id_" + name; script.onerror = function() { try{ func({ result : "connectFailed" }); }catch(e){ JSONP.JSONP_next(); } }; var head = document.getElementsByTagName("head"); if (head && head[0]) { head[0].appendChild(script); } this.currentNodeName = name; }, JSONP_next : function(){ if(this.waitPostArr && this.waitPostArr.length > 0){ this.getJSON(this.waitPostArr[0].url, this.waitPostArr[0].data, this.waitPostArr[0].func); this.waitPostArr.splice(0, 1); } } }; window["success_jsonpCallback"] = function(json) { var elem = document.getElementById("id_" + JSONP.currentNodeName); JSONP.removeElem(elem); try{ func(json); JSONP.JSONP_next(); }catch(e){ JSONP.JSONP_next() } };
給windows賦函數的時候沒有采取一個請求一個函數是因為后臺服務參數沒有函數名稱(WTF)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/100171.html
摘要:同源策略做了很嚴格的限制,但是在實際的場景中,又確實有很多地方需要突破同源策略的限制,也就是我們常說的跨域。使用跨域由于同源策略,一般來說位于的網頁無法與不是的服務器溝通,而的元素是一個例外。 本菜雞最近在寫某個頁面請求數據時,報了如下的錯誤。 Failed to load https://...:No Access-Control-Allow-Origin header is pre...
摘要:同源策略做了很嚴格的限制,但是在實際的場景中,又確實有很多地方需要突破同源策略的限制,也就是我們常說的跨域。使用跨域由于同源策略,一般來說位于的網頁無法與不是的服務器溝通,而的元素是一個例外。 本菜雞最近在寫某個頁面請求數據時,報了如下的錯誤。 Failed to load https://...:No Access-Control-Allow-Origin header is pre...
摘要:同源策略做了很嚴格的限制,但是在實際的場景中,又確實有很多地方需要突破同源策略的限制,也就是我們常說的跨域。使用跨域由于同源策略,一般來說位于的網頁無法與不是的服務器溝通,而的元素是一個例外。 本菜雞最近在寫某個頁面請求數據時,報了如下的錯誤。 Failed to load https://...:No Access-Control-Allow-Origin header is pre...
摘要:源碼我們經常在項目中遇到跨域問題,比如有時候在做個人項目的時候,我們需要請求第三方的一些數據,比如請求豆瓣公開的數據,或則音樂開放的數據等等。但是毫無疑問,在我們的應用中直接請求這些將出現跨域問題。比如,向豆瓣公開發送請求。 jsonGet源碼 我們經常在項目中遇到跨域問題,比如有時候在做個人項目的時候,我們需要請求第三方的一些數據,比如請求豆瓣公開api的數據,或則qq音樂開放api...
摘要:另外回答的時候要淡定,一些問題就算不懂也不能慌,要和面試官談笑風生,然后盡量扯回到自己懂的東西上面大公司比如百度給我的感覺就是很重視基礎思維和潛力。 —— 雖然我的offer少,但是我的拒信多啊 這幾天終于閑下來,做一點微小的工作,整理了一些之前幾家公司的前端面試題和個人經驗,想做前端的師弟妹可以參考,也歡迎各同行大神來指教~ (以下問題不分先后,時間久遠難免有些遺漏;很多問題面試官都...
閱讀 2130·2021-11-18 10:07
閱讀 3507·2021-09-04 16:48
閱讀 3214·2019-08-30 15:53
閱讀 1235·2019-08-30 12:55
閱讀 2453·2019-08-29 15:08
閱讀 3149·2019-08-29 15:04
閱讀 2879·2019-08-29 14:21
閱讀 2906·2019-08-29 11:21