跨域和模板引擎使用

2021-01-12  本文已影响0人  amanohina

跨域

同源策略

JSONP

jQuery对JSONP的支持

 <script src="js/jquery-1.12.4.min.js"></script>
  <script>
    $(".btn").click(function () {
      // 发送跨域的 ajax 请求
      $.ajax({
        url: "https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web",
        type: "GET",
        dataType: "jsonp",
        jsonp: "cb",    //这条属性可以设置回调函数的参数名称(必须与后台接口的回调函数参数名保持一致)
        jsonpCallback: "abc", //jQ 自动分配的回调函数的名称进行重命名
        data: {"wd": "ajax"},
        success: function (data) {
          console.log(data)
        }
      })
    })
  </script>

axios无法支持JSONP

CORS跨域

跨域请求实例:百度联想搜索

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>
    * {
      margin: 0;
      padding: 0;
    }
    ul {
      list-style: none;
    }
    input {
      border: 0;
      outline: none;
    }
    .box {
      width: 500px;
      height: 50px;
      margin:  20px auto;
    }
    .box .search-box {
      float: left;
      width: 400px;
      border: 2px solid #0af;
      box-sizing: border-box;
    }
    .box .search-box .txt {
      display: block;
      height: 46px;
      padding-left: 10px;
      line-height: 46px;
      font-size: 16px;
      color: #333;
    }
    .box .search-box ul li {
      padding: 0 10px;
      line-height: 36px;
    }
    .box .btn {
      float: left;
      width: 100px;
      height: 50px;
      background-color: #0af;
      font-size: 18px;
      color: #fff;
      font-weight: bold;
    }
  </style>  
</head>
<body>
  <div class="box">
    <div class="search-box">
        <input type="text" class="txt">
        <ul class="suggest-list">
          
        </ul>
    </div>
    <input type="button" value="搜索" class="btn">    
  </div> 
   <!--引包  -->
   <script src="js/jquery-1.12.4.min.js"></script>
   <script>
    //  添加一个 txt 中的按键弹起事件,每输入一个文字都会触发事件
    var $txt = $(".txt");
    var $ul = $(".suggest-list");

    $txt.keyup(function () {
      // 获取搜索联想的数据
      var keyword = $(this).val();
      // 发送数据请求
      $.ajax({
        url: "https://www.baidu.com/sugrec?pre=1&p=3&ie=utf-8&json=1&prod=pc&from=pc_web",
        dataType: "jsonp",
        jsonp: "cb",
        data: {"wd": keyword},
        success: function (data) {
          // console.log(data);
          // 获取需要的数组
          var arr = data.g;
          // 将所有的数组中的数据,渲染到页面中的 ul 里
          var str = "";
          // 数组遍历,进行字符串拼接
          for (var i = 0 ; i < arr.length; i++){
            str += `<li>${arr[i].q}</li>`
          }
          // 将最终拼接的字符串添加到页面上
          $ul.html(str);
        } 
      })
    })
   </script>
</body>
</html>

模板引擎作用

artTemplate

https://github.com/aui/artTemplate

https://aui.github.io/art-template/zh-cn/docs/

artTemplate使用

  <script src="js/jquery-1.12.4.min.js"></script>
  <!-- 1、引入模板的文件 -->
  <script src="js/template-native.js"></script>
  <!-- 2、创建模板 -->
  <script type="text/html" id="tem">
    <!-- 3、添加模板中的结构 -->
    <% for (var i = 0 ; i < 5 ; i++) { %>
      <div>这是一个模板中的 div<%= i %></div>
      <div>这是一个模板中的 div<%= name %></div>
    <% } %>    
    <!-- 4、在模板中编写 js 代码解析数据 -->
  </script>
</head>
<body>
  <div class="box">

  </div>
  <script>
    // 5、将模板内的内容添加到 box 里面
    // template() 方法可以调用模板内容
    // 参数1: 调用的模板的id
    // 参数2:是一个对象型的数据,数据会传给模板,对象中的每个属性的属性名在模板中可以直接当变量名使用
    $(".box").html(template("tem", {name: "tom"}));
  </script>
上一篇下一篇

猜你喜欢

热点阅读