js day01

来源:https://www.cnblogs.com/wahahshield/archive/2018/05/25/9088872.html
-Advertisement-
Play Games

一)什麼是JavaScript【以下簡稱JS】 JS是 (1)基於對象 JS本身就有一些現成的對象可供程式員使用,例如:Array,Math,String。。。 JS並不排除你可以自已按一定的規則創建對象 (2)事件驅動 JS代碼寫好後,需要外界觸發後,方可運行,例如:單擊事件,定時執行,。。。 ( ...


一)什麼是JavaScript【以下簡稱JS

    JS是

   (1)基於對象

        JS本身就有一些現成的對象可供程式員使用,例如:Array,Math,String。。。

        JS並不排除你可以自已按一定的規則創建對象

   (2)事件驅動

        JS代碼寫好後,需要外界觸發後,方可運行,例如:單擊事件,定時執行,。。。

   (3)解釋性

            每次運行JS代碼時,得需要將原代碼一行一行的解釋執行

        相對編譯型語言(例如:Java、C++)執行速度相對較慢

   (4)基於瀏覽器的動態交互網頁技術

            如果JS嵌入到HTML中,可以不需要伺服器支持,直接由瀏覽器解釋執行

            如果JS嵌入到JSP或Servlet中,必需要伺服器支持,直接由瀏覽器解釋執行

   (5)嵌入在HTML標簽中

            JS必須嵌入到一個名叫<script src="引入外部js文件"></script>的標簽中,方可運行

    腳本語言

 

 

二)JS中的三種類型

   (1)基本類型:number,string,boolean

        number包含正數,負數,小數

            string由''或""定界

                 boolean由true或false,但js中的boolean也包含更多情況,例如:存在表示true,不存在表示false

      var num = 100;

      var str = "哈哈";

      var flag = false;

      window.alert(num);

      window.alert(str);

      window.alert(flag);

 

   (2)特殊類型:null,undefined

            null表示一個變數指向null

            undefined表示一個變數指向的值不確定

      var array = null;

      var student;

      alert(array);

      alert(student);

 

   (3)複合類型:函數,對象,數組

            對象包含內置對象和自定義的對象

 

 

三)JS中有三種定義函數的方式

   (1)正常方式:function mysum(num1,num2){return num1+num2;}

        function mysum(num1,num2){

          return num1 + num2;

      }

      var myresult = mysum(100,200);

      alert("myresult="+myresult);

 

   (2)構造器方式:new Function("num1","num2","return num1+num2;")

      var youresult = new Function("num1","num2","return num1+num2");

      alert( youresult(1000,2000) );

 

   (3)直接量或匿名或無名方式:var mysum = function(num1,num2){return num1+num2;}

var theyresult = function(num1,num2){

                       return num1 + num2;

                    }

      alert( theyresult(10000,20000) );

 

 

四)JS中有四種對象

   (1)內置對象 :Date,Math,String,Array,。。。

      var str = new Date().toLocaleString();

      window.document.write("<font size='44' color='red'>"+str+"</font>");

 

   (2)自定義對象:Person,Card,。。。 

      function Student(id,name,sal){

          //this指向s引用

          this.id = id;

          this.name = name;

          this.sal = sal;

      }

      var s = new Student(1,"波波",7000);

      document.write("編號:" + s.id + "<br/>");

      document.write("姓名:" + s.name + "<br/>");

      document.write("薪水:" + s.sal + "<br/>");

 

   (3)瀏覽器對象: window,document,status,location,history。。。

function myrefresh(){

           window.history.go(0);

        }

 

   (4)ActiveX對象:ActiveXObject("Microsoft.XMLHTTP"),。。。

 

 

五)演示JS對象的屬性,方法和事件的使用

   (1)window.location.href

          var url = "04_array.html";

          window.location.href = url;

 

   (2)form.submit()

<form action="/js-day01/04_array.html" method="POST">

      <input type="button" value="提交到服務端" onclick="doSubmit()"/>

   </form>

   <script type="text/javascript">

      function doSubmit(){

          //表單提交

          document.forms[0].submit();

      }

   </script>

 

   (3)inputElement.onblur = 函數

   (4)document.createElement(“img”)

   (5)imgElement.style.width/height

 

六)回顧傳統Web應用請求和響應特點【顯示當前時間】

   (1)請求:瀏覽器以HTTP協議的方式提交請求到伺服器

   (2)響應:伺服器以HTTP協議的方式響應內容到瀏覽器

                  註意:HTTP是WEB大眾化非安全協議       

             HTTPS是WEB安全協議,是基於HTTP協議的,且加了一些加密等特殊功能,常用於線上支付,或者是需要安全性較高的網站中,例如:12306網站    

                  HTTP請求有三個部份組成:請求行,請求頭,請求體

                  HTTP響應有三個部份組成:響應行,響應頭,響應體                              

   (3)狀態欄:有明顯的進度條刷新現象,如果伺服器響應較慢的話,進度條刷新也會變慢,IE9等中高版本瀏覽器,有明顯轉圈圈圖標

   (4)歷史欄:會收集原來已訪問過的web頁面,進行緩存

   (5)缺點:不需變化的大量數據,也全部刷新,造成瀏覽器載入和處理負擔       

   (6)可改進的地方:讓不需變化的大量數據,原封不動,不用緩存到歷史欄中,無需全部刷新,只刷新某些需要變化的數據區域,例如:當前時間的區域

   當前時間:<span>${requestScope.str}</span><br/>

   <input type="button" value="同步方式提交"/>

       

   <script type="text/javascript">

      //定位button按鈕,同時添加單擊事件

      document.getElementsByTagName("input")[0].onclick = function(){

          var url = "${pageContext.request.contextPath}/TimeServlet?id="+new Date().getTime();

          window.location.href = url; 

      }

   </script>

       

public class TimeServlet extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

      System.out.println("TimeServlet::doGet");

      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      String str = sdf.format(new Date());

      request.setAttribute("str",str);

      request.getRequestDispatcher("/06_time.jsp").forward(request,response);

   }

}

 

七)什麼是AJAXAsynchronous非同步的JSXML】,工作原理與特點

   (1)什麼是同步:

            請求1->響應1->請求2->響應2->

        Web1.0時代

 

   (2)什麼是非同步:

            請求1->請求2->請求3->響應1->響應2->響應3->

            請求1->響應1->請求2->請求3->響應2->響應3->

            Web2.0時代

        項目中:Web1.0為主(整個瀏覽器刷新),Web2.0為輔(瀏覽器局部刷新)

 

   (3)什麼是AJAX

                 客戶端(特指PC瀏覽器)與伺服器,可以在【不必刷新整個瀏覽器】的情況下,與伺服器進行非同步通訊的技術   

            即,AJAX是一個【局部刷新】的【非同步】通訊技術

            AJAX不是全新的語言,是2005年Google公司推出的一種全新【編程模式】,不是新的編程語言

 

   (4)不用刷新整個頁面便可與伺服器通訊的辦法有:

       (A)Flash/ActionScript

       (B)框架Frameset

       (C)iFrame(內嵌入框架)

       (D)XMLHttpRequest(非IE瀏覽器)和ActiveXObject(IE瀏覽器)

                 背景:早上IE5時,微軟就開發出了第一個非同步通訊對象,叫ActiveXObject對象,

                 Firefox等其它瀏覽器廠商也慢慢引入非同步通訊對象,叫XMLHttpRequest對象,

                 IE的高版本,也將這個非同步對象取名叫XMLHttpRequest對象,但IE有向下相容問題,

             也可以使用ActiveXObject對象。

                           無需第三方jar包,現代中高版本瀏覽器中內置了這個非同步通訊對象,只需通過JavaScript就可以創建

                   註意:所有瀏覽器中都內置了非同步對象,在預設情況下,該非同步對象並沒有創建出來

function createAJAX(){

   var ajax = null;

   try{

      ajax = new ActiveXObject("microsoft.xmlhttp");

   }catch(e1){

      ajax = new XMLHttpRequest();

   }

   return ajax;

}

 

       

   (5)AJAX工作原理

        參見<<AJAX工作原理.JPG>>

 

   (6)AJAX包含的技術

        參見<<AJAX包含的技術.JPG>>

 

   (7)AJAX開發步驟

            步一:創建AJAX非同步對象,例如:createAJAX()

          步二:準備發送非同步請求,例如:ajax.open(method,url)

            步三:如果是POST請求的話,一定要設置AJAX請求頭,例如:ajax.setRequestHeader()

                  如果是GET請求的話,無需設置設置AJAX請求頭

            步四:真正發送請求體中的數據到伺服器,例如:ajax.send()

步五:AJAX不斷的監聽服務端響應的狀態變化,例如:ajax.onreadystatechange,後面寫一個無名處理函數   

            步六:在無名處理函數中,獲取AJAX的數據後,按照DOM規則,用JS語言來操作Web頁面   

 

   (8)AJAX適合用在什麼地方

            AJAX【適合】不用來傳遞大量數據,而只用來【傳遞少量數據】,在用戶的【體驗】上,【更加人性化】

            AJAX是一個和伺服器無關的技術,即伺服器可使用:JavaEE,.NET,PHP,。。。這些技術都可

            AJAX只管向伺服器發送請求,同時只管接收伺服器的HTML或XML或JSON載體響應

           服務端不能使用轉發或重定向到web頁面,因為這樣會起瀏覽器全面刷新

            即只能以流的方式響應給瀏覽器

 

八)AJAX應用

   (1)無需刷新整個Web頁面顯示伺服器響應的當前時間

 (text/html;charset=UTF-8)

   當前時間:<span></span><br/>

   <input type="button" value="非同步方式提交"/>

 

<script type="text/javascript">

      //定位button按鈕,同時添加單擊事件

      document.getElementsByTagName("input")[0].onclick = function(){

          //NO1)創建AJAX非同步對象(每個瀏覽器內置的,無需第三方jar包)

          var ajax = createAJAX();//0

          //NO2)AJAX非同步對象準備發送請求

          var url = "${pageContext.request.contextPath}/TimeServletAjax?id="+new Date().getTime();

          var method = "GET";

          ajax.open(method,url);//1

          //NO3)AJAX非同步對象真正發送請求體的數據到伺服器,如果請求體無數據的話,用null表示

          var content = null;

          ajax.send(content);//2

         

          //----------------------------------------等待

         

          //NO4)AJAX非同步對象不斷監聽服務端狀態的變化,只有狀態碼變化了,方可觸發函數

          //0-1-2-3-4,這些是可以觸發函數的

          //4-4-4-4-4,這些是不可以觸發函數的

          //以下這個函數是伺服器來觸發的,不是程式員觸發的,這和onclick是不一樣的

          ajax.onreadystatechange = function(){

             //如果AJAX狀態碼為4

             if(ajax.readyState == 4){

                //如果伺服器響應碼是200

                if(ajax.status == 200){

                   //NO5)從AJAX非同步對象中獲取伺服器響應的結果

                   var str = ajax.responseText;

                   //NO6)按照DOM規則,將結果動態添加到web頁面指向的標簽中

                   document.getElementsByTagName("span")[0].innerHTML = str;

                }

             }

          }

      }

   </script>

 

public class TimeServletAjax extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

      SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

      String str = sdf.format(new Date());

      //註意:在Web2.0時代,即非同步方式下,不能用轉發或重定向

      //因為:轉發或重定向會引起瀏覽器全部刷新,而不是局部刷新

      //所以得用以輸出流的方式將伺服器的結果輸出到瀏覽器

      response.setContentType("text/html;charset=UTF-8");

      PrintWriter pw = response.getWriter();

      pw.write(str);

      pw.flush();

      pw.close();

   }

}

 

   (2)基於HTML,以GET或POST方式,檢查註冊用戶名是否在資料庫中已存在(text/html;charset=UTF-8)

   輸入用戶名[POST]:<input type="text" maxlength="8"/>游標移出後,立刻顯示結果

   <hr/>

   <div></div>

        

public class RegisterServletPost extends HttpServlet {

   public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

      request.setCharacterEncoding("UTF-8");

      String username = request.getParameter("username");

      String tip = "images/MsgSent.gif";

      if("傑克".equals(username)){

          tip = "images/MsgError.gif";

      }

      response.setContentType("text/html;charset=UTF-8");

      PrintWriter pw = response.getWriter();

      pw.write(tip);

      pw.flush();

      pw.close();

   }

}

 

(3)基於XML,以POST方式,完成省份-城市二級下拉聯動

 (text/xml;charset=UTF-8)

   <select id="province" style="width:111px">

      <option>選擇省份</option>

      <option>廣東</option>

      <option>湖南</option>

      <option>湖北</option>

   </select>

  

   <select id="city" style="width:111px">

      <option>選擇城市</option>

   </select>

 

<script type="text/javascript">

      //定位省份下拉框,同時添時內容改變事件

      document.getElementById("province").onchange = function(){

          //清除城市下拉框中的內容除第一項外

          var citySelectElement = document.getElementById("city");

          citySelectElement.options.length = 1;

          //獲取選中的省份

          var i = this.selectedIndex;

          var optionElement = this[i];

          var province = optionElement.innerHTML;

          //如果不是"選擇省份"的話

          if("選擇省份" != province){

             //NO1)

             var ajax = createAJAX();

             //NO2)

             var method = "POST";

             var url = "${pageContext.request.contextPath}/ProvinceCityServlet?id="+new Date().getTime();

             ajax.open(method,url);

             ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");

             //NO3)

             var content = "province="+province;

             ajax.send(content);

            

             //-------------------------------------------------

            

             //NO4)

             ajax.onreadystatechange = function(){

                if(ajax.readyState == 4){

                   if(ajax.status == 200){

                       //NO5)

                       var xmlDocument = ajax.responseXML;

                       //NO6)按照dom規則,解析xml文件中的所有內容

                       var cityElementArray = xmlDocument.getElementsByTagName("city");

                       var size = cityElementArray.length;                    

                       for(var i=0;i<size;i++){

                          var cityElement = cityElementArray[i];

                          //innerHTML只能用於html和jsp頁面,不能用於xml頁面

                          //在xml頁面我們通常用firstChild.nodeValue去替代innerHTML

                          var city = cityElement.firstChild.nodeValue;

                          //<option></option>

                          var optionElement = document.createElement("option");

                          //<option>廣州</option>

                          optionElement.innerHTML = city;

                          //<select id="city" style="width:111px"><option>廣州</option></select>

                          citySelectElement.appendChild(optionElement);

                       }

                   }

                }

             }

          }

      }

   </script>

 

public class ProvinceCityServlet extends HttpServlet {

   public void doGet(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

      this.doPost(request,response);

   }

   public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

      request.setCharacterEncoding("UTF-8");

      String province = request.getParameter("province");

     

      response.setContentType("text/xml;charset=UTF-8");

      PrintWriter pw = response.getWriter();

      pw.write("<?xml version='1.0' encoding='UTF-8'?>");

      pw.write("<root>");

     

      if("廣東".equals(province)){

          pw.write("<city>廣州</city>");

          pw.write("<city>深圳</city>");

          pw.write("<city>中山</city>");

          pw.write("<city>珠海</city>");

      }else if("湖南".equals(province)){

          pw.write("<city>長沙</city>");

          pw.write("<city>株洲</city>");

          pw.write("<city>張家界</city>");

      }else if("湖北".equals(province)){

          pw.write("<city>武漢</city>");

          pw.write("<city>黃崗</city>");

      }

     

      pw.write("</root>");

      pw.flush();

      pw.close();

   }

}

 

   (4)驗證碼檢查

        (text/html;charset=UTF-8)

   <form>

      驗證碼:

      <input type="text" maxlength="4" size="4"/>

      <img src="image.jsp"/>

      <input type="button" value="看不清" size="2"/>

      <span></span>

   </form>

       

<script type="text/javascript">

      //定位按鈕,同時添加單擊事件

      document.getElementsByTagName("input")[1].onclick = function(){

          //定位img標簽,修改src屬性

          document.images[0].src = "image.jsp?id="+new Date().getTime();

          //清空span標簽中的內容

          var spanElement = document.getElementsByTagName("span")[0];

          spanElement.innerHTML = "";

          //清空文本框中的內容

         document.getElementsByTagName("input")[0].value = "";

      }

   </script>

  

   <script type="text/javascript">

      //定位文本框,同時添加鍵盤彈起事件

      document.getElementsByTagName("input")[0].onkeyup = function(){

          //獲取輸入的驗證碼

          var checkcode = this.value;

          //去空格

          checkcode = trim(checkcode);

          //獲取驗證碼的長度

          var size = checkcode.length;

          //如果長度為4

          if(size == 4){

             //NO1)

             var ajax = createAJAX();

             //NO2)

             var method = "POST";

             var url = "${pageContext.request.contextPath}/CheckcodeServlet?id="+new Date().getTime();

             ajax.open(method,url);

             ajax.setRequestHeader("content-type","application/x-www-form-urlencoded");

             //NO3)

             var content = "checkcode=" + checkcode;

             ajax.send(content);

            

             //--------------------------------------------

            

             //NO4)

             ajax.onreadystatechange = function(){

                if(ajax.readyState == 4){

                   if(ajax.status == 200){

                       //NO5)

                       var imagePath = ajax.responseText;

                     

                       //NO6)

                       var imgElement = document.createElement("img");

                       imgElement.src = imagePath;

                       imgElement.style.width = "14px";

                       imgElement.style.height = "14px";

                       var spanElement = document.getElementsByTagName("span")[0];

                      spanElement.innerHTML = "";

                      spanElement.appendChild(imgElement);

                   }

                }

             }

          }else{

             //清空span標簽中的內容

             var spanElement = document.getElementsByTagName("span")[0];

             spanElement.innerHTML = "";

          }

      }

   </script>

       

public class CheckcodeServlet extends HttpServlet {

   public void doPost(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {

      request.setCharacterEncoding("UTF-8");

      //獲取客戶端輸入的驗證碼

      String checkcodeClient = request.getParameter("checkcode");

      //獲取服務端產生的驗證碼

      HttpSession httpSession = request.getSession();

      String checkcodeServer = (String) httpSession.getAttribute("CHECKNUM");

      //二個驗證碼進行比較

      String tip = "images/MsgError.gif";

      if(checkcodeClient!=null && checkcodeServer!=null && checkcodeClient.equals(checkcodeServer)){

         tip = "images/MsgSent.gif";

      }

      //以流的方式輸出tip變數

      response.setContentType("text/html;charset=UTF-8");

      PrintWriter pw = response.getWriter();

      pw.write(tip);

      pw.flush();

      pw.close();

   }

}

 

 

九)XMLHttpRequest(即:AJAX)對象常用事件,方法和屬性

   (1)事件:

        ajax.onreadystatechange:表示AJAX非同步對象不斷監聽服務端的響應,

        是由伺服器程式觸發,不是程式員觸發

 

   (2)屬性:

            ajax.readyState==0:表示AJAX非同步對象已創建好,但還沒有調用open()方法

 

            ajax.readyState==1:表示AJAX非同步對象已調用open()方法,但還沒有調用send()方法

 

            ajax.readyState==2:表示AJAX非同步對象已調用send()方法,但請求還沒有到達伺服器端

 

            ajax.readyState==3:表示服務端已接收到AJAX非同步對象的請求,正在處理響應中。。。

 

ajax.readyState==【4】:表示AJAX非同步對象已經完完全全接收到了伺服器的響應信             息,但接收到的數據不一定都正確

上述5種狀態不是所有瀏覽器都相同,但狀態4每種瀏覽器都相同

 

        ajax.status==200:表示AJAX非同步對象接收到響應碼,如果是200的話,表示一切正常

       

        ajax.responseText:表示從AJAX非同步對象中獲取HTML載體中的數據

 

            ajax.responseXML:表示從AJAX非同步對象中獲取XML載體中的數據

 

   (3)方法:

            ajax.open(method,url,可選的boolean值)

            AJAX非同步對象準備發送非同步請求

            參數一:以什麼方式發送,常用的用GET或POST,大小寫不敏感

            參數二:發送到什麼地方去,常用Servlet或Struts2或SpringMVC來接收,

這裡只限於JavaEE學科       

            參數三:預設值為true,表示AJAX對象以【非同步】的方式提交到服務端

                    如果設置為false,表示AJAX對象以【同步】的方式提交到服務端

 

        ajax.setRequestHeader("content-type","application/x-www-form-urlencoded")

            表示將請求體中的內容,按照UTF-8的方式進行編碼,只針對POST請求有效   

 

            ajax.send(content)

            AJAX非同步對象真正發送非同步請求

            參數一:表示HTTP【請求體】中的內容

                 如果是GET方式:content = null,如果強行傳值到伺服器,服務端收不到,返回NULL

                 如果是POST方式:content != null,例如:username=jack&password=123&role=admin

 

 

十)數據載體

   (1)HTML

(A)優點:服務端響應的是普通html字元串,無需JS解析,配合innerHTML屬性效率高

       (B) 缺點:如果需要更新WEB頁面中的很多處地方,HTML不太方便,同時innerHTML屬性不是DOM的標準,不能操作XML

                  註意:innerHTML在xml中不能使用,用firstChild.nodeValue替代

       (C)適合:小量數據載體,且只更新在web頁面中的一個地方

 

   (2)XML

   (A)優點:是種通用的普通字元串格式,任何技術都能解析,標簽名可以任意,使用DOM標準規則能夠解析XML的任何部分

       (B)缺點:XML文件格式相當嚴格,出錯後,responseXML屬性返回NULL,如果XML文件過長,導致解析效率低下

       (C)適合:大量具有層次數據載體    

 

   (3)JSON (下次課講)+ struts2框架

        兼備HTML和XML的特點


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在react項目開發中,當訪問預設頁面時會一次性請求所有的js資源,這會大大影響頁面的載入速度和用戶體驗。所以添加按需載入功能是必要的,以下是配置按需載入的方法: 安裝bundle-loader 定義Bundle.js app.jsx配置 webpack.config.js 修改 這樣就可以實現頁面 ...
  • 對於常見的搜索需求業務場景,用戶輸入完成後,點擊enter事件請求數據,要求不提交頁面,實現數據局部更新,這需要用到react中的表單Forms。 處理方法: (1)html書寫 form標簽中去掉action參數,定義onSubmit方法,如下所示: (2)事件處理 關鍵的是阻止掉頁面預設提交: ...
  • 官方示例 https://fengyuanchen.github.io/cropper/ 參考:https://segmentfault.com/a/1190000012344970 ...
  • 導入控制項 效果就是 點擊一次上傳, 當上傳操作結束後 才能操作界面 ...
  • 日常代碼一般提交到github比較多,但我還是鐘愛馬爸爸,沒錯就是碼雲。 碼雲是中文版的代碼托管的網站,不存在打開網速問題,使用也蠻方便的,日常自己保存托管代碼已經足夠,平時使用git提交代碼到碼雲是非常方便的,具體也就一下幾個步驟: 1、註冊碼雲賬號,新建一個屬於自己的項目。 2、安裝git,一定 ...
  • 日常項目中經常會用到百度地圖或者echarts圖標展示,今天給大家展示的是如何在react開發項目中使用百度echars的地圖展示,把中國地圖分為東北大區、華東大區、華南大區、華西大區、華中大區以及華北大區並用顏色標識方便識別。 最終展示效果如下: 我是直接用的react官方提供的create-re ...
  • 前言 最近在項目中遇到了兩個需求,並且都用到了H5的這兩種儲存方式 1 sessionStorage 需求:我從後臺得到一個URL的時候,我根據路由判斷用戶一進入頁面顯示出一個蒙層,當用戶進入當前頁面的其他頁面再返回時需要使蒙層消失,這時候我就使用到了sessionStorage以及它的特性 瀏覽器 ...
  • 現在的項目需求很簡單,當進入一個頁面的時候,如果沒登錄,則跳轉到登錄頁面,如果登錄了則直接到對應頁面。 koa2寫的項目,使用koa-passport,koa-session,根據koa-passport的 router.js: passport.js: 問題:目前用 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...