主頁 > 企業開發 > Vue基礎(八):Vue前端互動

Vue基礎(八):Vue前端互動

2020-09-10 05:00:54 企業開發

1. Vue前端互動

介面呼叫的方式有哪些?

  • 原生ajax
  • 基于jQuery的ajax
  • Fetch
  • Promise

url地址格式有哪些?

  • 傳統的url
  • Restful形式的url

1.1 異步

JavaScript的執行環境是「單執行緒」

所謂單執行緒,是指JS引擎中負責解釋和執行JavaScript代碼的執行緒只有一個,也就是一次只能完成一項任務,這 個任務執行完后才能執行下一個,它會「阻塞」其他任務,這個任務可稱為主執行緒

異步模式可以一起執行多個任務

JS中常見的異步呼叫

  • 定時任何
  • ajax
  • 事件函式

1.2 promise

主要解決異步深層嵌套的問題 promise

提供了簡潔的API 使得異步操作更加容易 

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript" src="https://www.cnblogs.com/liuhui0308/p/js/vue.js"></script>
  <script type="text/javascript">
        /*
            1. Promise基本使用
            我們使用new來構建一個Promise Promise的建構式接收一個引數,是函式,并且傳入兩個引數:
            resolve,reject, 分別表示異步操作執行成功后的回呼函式和異步操作執行失敗后的回呼函式
        */
        var p = new Promise(function(resolve, reject){
        //2. 這里用于實作異步任務 setTimeout
        setTimeout(function(){
            var flag = false;
            if(flag) {
                //3. 正常情況
                resolve('hello');
            }else{
                //4. 例外情況
                reject('出錯了');
            }
        }, 100);
    });
        // 5 Promise實體生成以后,可以用then方法指定resolved狀態和reject狀態的回呼函式基于Promise發送Ajax請求Promise 基本API
        // 在then方法中,你也可以直接return資料而不是Promise物件,在后面的then中就可以接收到資料了
        p.then(function(data){
        console.log(data)
    },function(info){
        console.log(info)
    });
    </script>
</body>
</html>

執行效果:

只要將代碼中的flag值改成true,就會顯示hello,

1.3 基于Promise發送Ajax請求

Promise可以幫我們解決Ajax請求執行順序的問題,可以將嵌套的復雜代碼,修改為鏈式代碼,

玩ajax需要安裝node.js,自己百度,

index.js:

const express = require('express')
const app = express()
const bodyParser = require('body-parser')
// 處理靜態資源
app.use(express.static('public'))
// 處理引數
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// 設定允許跨域訪問該服務
app.all('*', function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  res.header('Access-Control-Allow-Headers', 'mytoken');
  next();
});

// 路由
app.get('/data', (req, res) => {
  res.send('Hello World!')
})
app.get('/data1', (req, res) => {
  setTimeout(function(){
    res.send('Hello TOM!')
  },1000);
})
app.get('/data2', (req, res) => {
  res.send('Hello JERRY!')
})

// 啟動監聽
app.listen(3000, () => {
  console.log('running...')
})

運行index.js:

執行效果:

可以看到,我們可以輕松的控制多個ajax請求的順序了,

1.4 Promise常用API

 .then():得到異步任務正確的結果

thrn引數中的函式回傳值:

1.回傳Promise實體物件

回傳的該實體物件會呼叫的下一個then

2.回傳普通值

回傳的普通值會傳遞給下一個then,通過then引數中函式的引數接收該值

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript">
    /*
      then引數中的函式回傳值
    */
    function queryData(url) {
      return new Promise(function(resolve, reject){
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function(){
          if(xhr.readyState != 4) return;
          if(xhr.readyState == 4 && xhr.status == 200) {
            // 處理正常的情況
            resolve(xhr.responseText);
          }else{
            // 處理例外情況
            reject('服務器錯誤');
          }
        };
        xhr.open('get', url);
        xhr.send(null);
      });
    }
    queryData('http://localhost:3000/data')
      .then(function(data){
        return queryData('http://localhost:3000/data1');
      })
      .then(function(data){
        return new Promise(function(resolve, reject){
          setTimeout(function(){
            resolve(123);
          },1000)
        });
      })
      .then(function(data){
        return 'hello';
      })
      .then(function(data){
        console.log(data)
      })
  </script>
</body>
</html>

執行的效果:

.catch():獲取例外資訊

.finally():成功與否都會執行(不是正式標準)

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript">
    /*
      Promise常用API-實體方法
    */
    // console.dir(Promise);
    function foo() {
      return new Promise(function(resolve, reject){
        setTimeout(function(){
          // resolve(123);
          reject('error');
        }, 100);
      })
    }
    // foo()
    //   .then(function(data){
    //     console.log(data)
    //   })
    //   .catch(function(data){
    //     console.log(data)
    //   })
    //   .finally(function(){
    //     console.log('finished')
    //   });

    // --------------------------
    // 兩種寫法是等效的
    foo()
      .then(function(data){
        console.log(data)
      },function(data){
        console.log(data)
      })
      .finally(function(){
        console.log('finished')
      });
  </script>
</body>
</html>

執行的效果:

 

.all():
Promise.all方法接受一個陣列作引數,陣列中的物件(p1、p2、p3)均為promise實體(如果不是一個promise,該項會被用Promise.resolve轉換為一個promise),它的狀態由這三個promise實體決定,
.race():
Promise.race 方法同樣接受一個陣列作引數,當p1, p2, p3中有一個實體的狀態發生改變(變為fulfilled或rejected),p的狀態就跟著改變,并把第一個改變狀態的promise的回傳值,傳給p的回呼函式,

index.js:

const express = require('express')
const app = express()
const bodyParser = require('body-parser')
// 處理靜態資源
app.use(express.static('public'))
// 處理引數
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));

// 設定允許跨域訪問該服務
app.all('*', function (req, res, next) {
  res.header("Access-Control-Allow-Origin", "*");
  res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');
  res.header("Access-Control-Allow-Headers", "X-Requested-With");
  res.header('Access-Control-Allow-Headers', 'Content-Type');
  res.header('Access-Control-Allow-Headers', 'mytoken');
  next();
});

app.get('/a1', (req, res) => {
  setTimeout(function(){
    res.send('Hello TOM!')
  },1000);
})
app.get('/a2', (req, res) => {
  setTimeout(function(){
    res.send('Hello JERRY!')
  },2000);
})
app.get('/a3', (req, res) => {
  setTimeout(function(){
    res.send('Hello SPIKE!')
  },3000);
})

// 啟動監聽
app.listen(3000, () => {
  console.log('running...')
})

html代碼:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript">
    /*
      Promise常用API-物件方法
    */
    // console.dir(Promise)
    function queryData(url) {
      return new Promise(function(resolve, reject){
        var xhr = new XMLHttpRequest();
        xhr.onreadystatechange = function(){
          if(xhr.readyState != 4) return;
          if(xhr.readyState == 4 && xhr.status == 200) {
            // 處理正常的情況
            resolve(xhr.responseText);
          }else{
            // 處理例外情況
            reject('服務器錯誤');
          }
        };
        xhr.open('get', url);
        xhr.send(null);
      });
    }

    var p1 = queryData('http://localhost:3000/a1');
    var p2 = queryData('http://localhost:3000/a2');
    var p3 = queryData('http://localhost:3000/a3');
    // all 中的引數 [p1,p2,p3] 和 回傳的結果一 一對應["HELLO TOM", "HELLO JERRY","HELLO SPIKE"]
//  Promise.all([p1,p2,p3]).then(function(result){
//    console.log(result)
//  })
    Promise.race([p1,p2,p3]).then(function(result){
        // 由于p1執行較快,Promise的then()將獲得結果'P1',p2,p3仍在繼續執行,但執行結果將被丟棄,
      console.log(result)
    })
  </script>
</body>
</html>

執行效果:

還有就是執行所有

1.5 Fetch

Fetch API是新的ajax解決方案 Fetch會回傳Promise

fetch不是ajax的進一步封裝,而是原生js,沒有使用XMLHttpRequest物件,

fetch(url, options).then() 

index.js:

app.get('/fdata', (req, res) => {
  res.send('Hello Fetch!')
})

html:

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript">
    /*
      Fetch API 基本用法
    */
    fetch('http://localhost:3000/fdata').then(function(data){
      // text()方法屬于fetchAPI的一部分,它回傳一個Promise實體物件,用于獲取后臺回傳的資料
      return data.text();
    }).then(function(data){
      console.log(data);
    })
  </script>
</body>
</html>

執行效果:

1.5.1 fetch API中的HTTP請求 

index.js:

app.get('/books', (req, res) => {
  res.send('傳統的URL傳遞引數!' + req.query.id)
})
app.get('/books/:id', (req, res) => {
  res.send('Restful形式的URL傳遞引數!' + req.params.id)
})
app.delete('/books/:id', (req, res) => {
  res.send('DELETE請求傳遞引數!' + req.params.id)
})
app.post('/books', (req, res) => {
  res.send('POST請求傳遞引數!' + req.body.uname + '---' + req.body.pwd)
})

html:

<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript">
    /*
      Fetch API 呼叫介面傳遞引數
    */

    // GET引數傳遞-傳統URL
//     fetch('http://localhost:3000/books?id=123', {
//       method: 'get'
//     })
//       .then(function(data){
//         return data.text();
//       }).then(function(data){
//         console.log(data)
//       });

    // GET引數傳遞-restful形式的URL
//     fetch('http://localhost:3000/books/456', {
//       method: 'get'
//     })
//       .then(function(data){
//         return data.text();
//       }).then(function(data){
//         console.log(data)
//       });

    // DELETE請求方式引數傳遞
//     fetch('http://localhost:3000/books/789', {
//       method: 'delete'
//     })
//       .then(function(data){
//         return data.text();
//       }).then(function(data){
//         console.log(data)
//       });

    // POST請求傳參
       fetch('http://localhost:3000/books', {
         method: 'post',
         body: 'uname=lisi&pwd=123',
         headers: {
           'Content-Type': 'application/x-www-form-urlencoded'
         }
       })
         .then(function(data){
           return data.text();
         }).then(function(data){
           console.log(data)
         });
  </script>
</body>
</html>

執行效果:

1.5.2 fetch API中回應格式 

用fetch來獲取資料,如果回應正常回傳,我們首先看到的是一個response物件,其中包括回傳的一堆原始位元組,這些位元組需要在收到后,需要我們通過呼叫方法將其轉換為相應格式的資料,比如JSON ,BLOB或者TEXT等等,

index.js:

app.get('/json', (req, res) => {
  res.json({
    uname: 'lisi',
    age: 13,
    gender: 'male'
  });
})

html:

<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript">
    /*
      Fetch回應結果的資料格式
    */
    fetch('http://localhost:3000/json').then(function(data){
      // return data.json(); // 將獲取到的資料使用 json 轉換物件
      return data.text(); // 將獲取到的資料 轉換成字串
    }).then(function(data){
      // console.log(data.uname)
      // console.log(typeof data)
      var obj = JSON.parse(data);
      console.log(obj.uname,obj.age,obj.gender)
    })
  </script>
</body>
</html>

執行效果:

1.6 axios 

axios(官網:https://github.com/axios/axios)是一個基于Promise用于瀏覽器和node.js的HTTP客戶端,

支持瀏覽器和node.js

支持promise

能攔截請求和回應

自動轉換JSON資料

能轉換請求和回應資料

從官網下載下來:

1.6.1 axios的基本用法

get和delete請求傳遞引數

  • 通過傳統的url以?的形式傳遞引數
  • restful形式傳遞引數
  • 通過params形式傳遞引數

post和put請求傳遞引數

  • 通過選項傳遞引數
  • 通過URLSearchParams傳遞引數

index.js:

app.get('/adata', (req, res) => {
  res.send('Hello axios!')
})

html:

<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript" src="https://www.cnblogs.com/liuhui0308/p/js/axios.js"></script>
  <script type="text/javascript">
    axios.get('http://localhost:3000/adata').then(function(ret){
      // 注意data屬性是固定的用法,用于獲取后臺的實際資料
      // console.log(ret.data)
      console.log(ret)
    })
  </script>
</body>
</html>

執行效果:

 

1.6.2 axios請求傳參

index.js:

app.get('/axios', (req, res) => {
  res.send('axios get 傳遞引數' + req.query.id)
})
app.get('/axios/:id', (req, res) => {
  res.send('axios get (Restful) 傳遞引數' + req.params.id)
})
app.delete('/axios', (req, res) => {
  res.send('axios get 傳遞引數' + req.query.id)
})
app.post('/axios', (req, res) => {
  res.send('axios post 傳遞引數' + req.body.uname + '---' + req.body.pwd)
})
app.put('/axios/:id', (req, res) => {
  res.send('axios put 傳遞引數' + req.params.id + '---' + req.body.uname + '---' + req.body.pwd)
})

html:

<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript" src="https://www.cnblogs.com/liuhui0308/p/js/axios.js"></script>
  <script type="text/javascript">
    /*
      axios請求引數傳遞
    */
    // axios get請求傳參
    // axios.get('http://localhost:3000/axios?id=123').then(function(ret){
    //   console.log(ret.data)
    // })
    // axios.get('http://localhost:3000/axios/123').then(function(ret){
    //   console.log(ret.data)
    // })
    // axios.get('http://localhost:3000/axios', {
    //   params: {
    //     id: 789
    //   }
    // }).then(function(ret){
    //   console.log(ret.data)
    // })

    // axios delete 請求傳參
    // axios.delete('http://localhost:3000/axios', {
    //   params: {
    //     id: 111
    //   }
    // }).then(function(ret){
    //   console.log(ret.data)
    // })

       axios.post('http://localhost:3000/axios', {
         uname: 'lisi',
         pwd: 123
       }).then(function(ret){
         console.log(ret.data)
       })
       var params = new URLSearchParams();
       params.append('uname', 'zhangsan');
       params.append('pwd', '111');
       axios.post('http://localhost:3000/axios', params).then(function(ret){
         console.log(ret.data)
       })
  </script>
</body>
</html>

執行效果:

1.6.3 axios回應結果與全域配置

相應結果的主要屬性:

data:實際回應回來的資料

headers:回應頭資訊

status:回應狀態碼

statusText:回應狀態資訊

全域配置資訊:

配置公共的請求頭  axios.defaults.baseURL = 'https://api.example.com';

配置超時時間  axios.defaults.timeout = 2500;

配置公共的請求頭  axios.defaults.headers.common['Authorization'] = AUTH_TOKEN;

配置公共的post的Content-Type  axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded'; 

index.js:

app.get('/axios-json', (req, res) => {
  res.json({
    uname: 'lisi',
    age: 12
  });
})

html:

<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript" src="https://www.cnblogs.com/liuhui0308/p/js/axios.js"></script>
  <script type="text/javascript">
    /*
      axios 回應結果與全域配置
    */
   axios.get('http://localhost:3000/axios-json').then(function(ret){
     console.log(ret.data.uname)
   })

    // 配置請求的基準URL地址
    axios.defaults.baseURL = 'http://localhost:3000/';
    // 配置請求頭資訊
    axios.defaults.headers['mytoken'] = 'hello';
    axios.get('axios-json').then(function(ret){
      console.log(ret.data.uname)
    })
  </script>
</body>
</html>

執行效果:

 

1.6.4 axios攔截器

請求攔截器:

請求攔截器的作用是在請求發送前進行一些操作 例如在每個請求體里加上token,統一做了處理如果以后要改也非常容易,

回應攔截器:

回應攔截器的作用是在接收到回應后進行一些操作 例如在服務器回傳登錄狀態失效,需要重新登錄的時候,跳轉到登錄頁,

index.js:

app.get('/adata', (req, res) => {
  res.send('Hello axios!')
})

html:

<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript" src="https://www.cnblogs.com/liuhui0308/p/js/axios.js"></script>
  <script type="text/javascript">
    /*
      axios攔截器
    */
// 1. 請求攔截器
    axios.interceptors.request.use(function(config) {
      console.log(config.url)
//    1.1 任何請求都會經過這一步 在發送請求之前做些什么
      config.headers.mytoken = 'nihao';
//    1.2 這里一定要return 否則配置不成功
      return config;
    }, function(err){
      console.log(err)
    })
//    2. 回應攔截器
    axios.interceptors.response.use(function(res) {
      console.log(res)
//    2.1 在接收回應做些什么
      var data =https://www.cnblogs.com/liuhui0308/p/ res.data;
      return data;
    }, function(err){
        //2.2 對回應錯誤做點什么
      console.log(err)
    })
    axios.get('http://localhost:3000/adata').then(function(data){
      console.log(data)
    })
  </script>
</body>
</html>

執行效果:

 

1.6.5 async和await

async作為一個關鍵字放到函式前面

  • 任何一個async函式都會隱式回傳一個promise

await關鍵字只能在使用async定義的函式中使用

  • await后面可以直接跟一個Promise實體物件
  • await函式不能單獨使用

async/await讓異步代碼看起來、表現起來更像同步代碼 

index.js:

app.get('/async1', (req, res) => {
  res.send('hello1')
})
app.get('/async2', (req, res) => {
  if(req.query.info == 'hello') {
    res.send('world')
  }else{
    res.send('error')
  }
})

html:

<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript" src="https://www.cnblogs.com/liuhui0308/p/js/axios.js"></script>
  <script type="text/javascript">
    /*
      async/await 處理異步操作:
      async函式回傳一個Promise實體物件
      await后面可以直接跟一個 Promise實體物件
    */
    axios.defaults.baseURL = 'http:localhost:3000';
    // axios.get('adata').then(function(ret){
    //   console.log(ret.data)
    // })
    
    // async function queryData() {
    //   var ret = await axios.get('adata');
    //   // console.log(ret.data)
    //   return ret.data;
    // }

        //1. async 基礎用法
        //1.1 async作為一個關鍵字放到函式前面
    async function queryData() {
        //1.2 await關鍵字只能在使用async定義的函式中使用 await后面可以直接跟一個 Promise實體物件
      var ret = await new Promise(function(resolve, reject){
        setTimeout(function(){
          resolve('nihao')
        },1000);
      })
      // console.log(ret.data)
      return ret;
    }
    //1.3 任何一個async函式都會隱式回傳一個promise 我們可以使用then 進行鏈式編程
    queryData().then(function(data){
      console.log(data)
    })
  </script>
</body>
</html>

執行效果:

 

html:

<html>
<head>
  <meta charset="UTF-8">
  <title>Vue的基本使用</title>
</head>
<body>
  <script type="text/javascript" src="https://www.cnblogs.com/liuhui0308/p/js/axios.js"></script>
  <script type="text/javascript">
    /*
      async/await處理多個異步任務
    */
        //2. async 函式處理多個異步函式
    axios.defaults.baseURL = 'http://localhost:3000';

    async function queryData() {
        //2.1 添加await之后 當前的await 回傳結果之后才會執行后面的代碼
      var info = await axios.get('async1');
      //2.2 讓異步代碼看起來、表現起來更像同步代碼
      var ret = await axios.get('async2?info=' + info.data);
      return ret.data;
    }

    queryData().then(function(data){
      console.log(data)
    })
  </script>
</body>

執行效果:

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/934.html

標籤:JavaScript

上一篇:URL地址值的獲取、前端跨域請求與傳過來的資料為xml的處理方式

下一篇:vue、react等SPA應用頁腳組件閃爍的解決辦法

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more