zoukankan      html  css  js  c++  java
  • 前端通信的方式

    通信是在面试中,作为考验各位知识面广度的重要方式;当然它也可以问的很细:从基本原理到代码实现;再到兼容性的问题。 

     参考文档: 前端跨越通信的几种方式

    Ajax的实现: 

    请一定要考虑到兼容性问题;

    状态码请自行百度咯:

     1 var ajax = function(param) {
     2   // 兼容性问题
     3   var xhr = XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("Microsoft.XMLHTTP");
     4   // 获取参数
     5   var type = param.type.toUpperCase();
     6   var url = param.url;
     7   if (!url) {
     8      return
     9   }
    10   var data = param.data,
    11       dataArr = [];
    12   // 拼接请求字段
    13   for (var k in data) {
    14      dataArr.push(k + '=' + data[k]);
    15   }
    16   if (type == 'GET') {
    17      url = url + '?' + dataArr.join('&');
    18      xhr.open(type, url);
    19      xhr.send();
    20   } else {
    21     xhr.open(type, url);
    22     xmlhttp.setRequestHeader("Content-type", "application/x-www-form-urlencoded");
    23     xhr.send(dataArr.join('&'));
    24   }
    25   // 请求成功的监听
    26   xhr.onload = function() {
    27     // 对http状态码的验证
    28     // 不要忽视了304,其含义代表资源重定向,即利用本地缓存; 如果其他的请求情况 可能还需要添加其他的请求状态码(如请求数据量较大的媒体资源,使用206)
    29     if (xhr.status === 200 || xhr.status === 304) {
    30       var res;
    31       if (opt.success && opt.success instanceof Function) {
    32         res = xhr.responseText;
    33         if (typeof res === 'string') {
    34           res = JSON.parse(res);
    35           opt.success.call(xhr, res);
    36         }
    37       }
    38     } else {
    39       if (opt.error && opt.error instanceof Function) {
    40         opt.error.call(xhr, res);
    41       }
    42     }
    43   }
    44 }

    jsonp 的跨越通信:

    jsonp本质上就是利用HTML元素中script标签的异步加载来实现的

    通过加载script标签的方式去发送一个请求,然后返回一个js块,这个块中有:回调函数名 和 代码

    例如: 有着这样的一个script标签:  

    <script src="http://www.baidu.com?data=name&callbcak=jsonp" charset="utf-8">

    那么就会返回:

    <script>

      jsonp({

      data:{}

      ....

     })

    </script>

    代码实现:

     1 function jsonp(url, data = {}, callback = "callback") {
     2   data.callback = callback;
     3   url = url.replace(/?$/g, '');
     4   var params = [];
     5   // 拼接请求字段
     6   for (const k in data) {
     7     params.push(k + '=' + data[k]);
     8   }
     9   params.join('&');
    10   // 创建script标签
    11   var script = document.createElement('script');
    12   script.src = url + '?' + params.join('&');
    13   document.body.appendChild(script);
    14   // 创建Promise对象进行处理
    15   return new Promise((resolve, reject) => {
    16     window[callback] = (data) => {
    17       try {
    18         resolve(data)
    19       } catch (e) {
    20         reject(e)
    21       } finally {
    22         // 最后一定要移除元素
    23         script.parentNode.removeChild('script');
    24       }
    25     }
    26   })
    27 }
  • 相关阅读:
    excel经典图表
    excel数据透视表
    excel常用快捷键和技巧
    excel常用公式--时间序列类
    excel常用公式--计算统计类
    excel常用公式--逻辑运算类
    excel常用公式--关联匹配类
    FileWriter字符输出流和FileReader字符输出流
    FileOutputStream字节输出流和FileInputStream输入流(切记:out是输出到本地中,in是输入到程序中)这里介绍大文件和小文件的读取方式
    DataInputStream(二进制输入流)和DataOutputStream二进制输出流(注意:in是从本地文件输入到程序中,out是从程序输出到本地种)
  • 原文地址:https://www.cnblogs.com/xuhua123/p/11502545.html
Copyright © 2011-2022 走看看