1. 程式人生 > >js面試題-----通信類

js面試題-----通信類

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面試題-----通信類