js面試題-----通信類
阿新 • • 發佈:2017-09-12
log 技術分享 sof 事件 嵌入 sage list 通信 als
題目1:什麽是同源策略及限制
題目2:前後端如何通信
Ajax WebSocket CORS
題目3:如何創建Ajax
XMLHttpRequest對象的工作流程
兼容性處理
事件的觸發條件
事件的觸發順序
util.json = function (options) { var opt = { url: ‘‘, type: ‘get‘, data: {}, success: function () {}, error: function () {}, }; util.extend(opt, options);if (opt.url) { var xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject(‘Microsoft.XMLHTTP‘); var data = opt.data, url = opt.url, type = opt.type.toUpperCase(), dataArr = []; for (var k in data) { dataArr.push(k+ ‘=‘ + data[k]); } if (type === ‘GET‘) { url = url + ‘?‘ + dataArr.join(‘&‘); xhr.open(type, url.replace(/\?$/g, ‘‘), true); xhr.send(); } if (type === ‘POST‘) { xhr.open(type, url, true); xmlhttp.setRequestHeader(‘Content-type‘, ‘application/x-www-form-urlencoded‘); xhr.send(dataArr.join(‘&‘)); } xhr.onload = function () { if (xhr.status === 200 || xhr.status === 304) { var res; if (opt.success && opt.success instanceof Function) { res = xhr.responseText; if (typeof res ==== ‘string‘) { res = JSON.parse(res); opt.success.call(xhr, res); } } } else { if (opt.error && opt.error instanceof Function) { opt.error.call(xhr, res); } } }; } };
題目4:跨域通信的幾種方式
JSONP Hash PostMessage WebSocket CORS
JSONP (最常用的,這裏不解釋了)
Hash
// 利用hash,場景是當前頁面 A 通過iframe或frame嵌入了跨域的頁面 B // 在A中偽代碼如下: var B = document.getElementsByTagName(‘iframe‘); B.src = B.src + ‘#‘ + ‘data‘; // 在B中的偽代碼如下 window.onhashchange = function () { var data = window.location.hash; };
PostMessage
// postMessage // 窗口A(http:A.com)向跨域的窗口B(http:B.com)發送信息 Bwindow.postMessage(‘data‘, ‘http://B.com‘); // 在窗口B中監聽 window.addEventListener(‘message‘, function (event) { console.log(event.origin);//http:A.com console.log(event.source);//Awindow console.log(event.data);//data }, false);
WebSocket
// Websocket【參考資料】http://www.ruanyifeng.com/blog/2017/05/websocket.html var ws = new WebSocket(‘wss://echo.websocket.org‘); ws.onopen = function (evt) { console.log(‘Connection open ...‘); ws.send(‘Hello WebSockets!‘); }; ws.onmessage = function (evt) { console.log(‘Received Message: ‘, evt.data); ws.close(); }; ws.onclose = function (evt) { console.log(‘Connection closed.‘); };
CORS
// CORS【參考資料】http://www.ruanyifeng.com/blog/2016/04/cors.html // url(必選),options(可選) fetch(‘/some/url/‘, { method: ‘get‘, }).then(function (response) { }).catch(function (err) { // 出錯了,等價於 then 的第二個參數,但這樣更好用更直觀 });
js面試題-----通信類