js面試題-----通訊類

題目1:什麼是同源策略及限制html

 

題目2:先後端如何通訊web

  Ajax   WebSocket   CORSjson

題目3:如何建立Ajax後端

  XMLHttpRequest對象的工做流程跨域

  兼容性處理websocket

  事件的觸發條件app

  事件的觸發順序cors

 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:跨域通訊的幾種方式socket

  JSONP    Hash   PostMessage   WebSocket   CORSpost

  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 的第二個參數,但這樣更好用更直觀
      });
相關文章
相關標籤/搜索