Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 久久久网站亚洲第一,91成人在线免费视频,国产午夜精品一区二区三区小说

          整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          JavaScript庫hxsfx.ajax之解決動態(tài)加載HTML

          最近寫博客真的是太痛苦了,倒不是寫博客本身,而是寫完之后往多個平臺發(fā)布的過程,一不注意就是十多分鐘往上的時間消耗。

          為了解決這個問題,之前立項(xiàng)的“解決自媒體一鍵多平臺發(fā)布”項(xiàng)目必須得立刻著手完善了,爭取早日讓自己從發(fā)布這件事情上解脫出來專心寫文章。

          【hxsfx的JavaScript庫】這個系列基本上是為“一鍵多平臺發(fā)布”項(xiàng)目打基礎(chǔ)用的。之所以把各個功能模塊拆分出來,是為了盡量讓小伙伴能夠復(fù)制即用(在兼容性方面,因?yàn)閭€人能力的原因,幾乎只會兼容Chrome瀏覽器)。


          hxsfx.ajax庫

          (一)介紹

          AJAX 是異步的 JavaScript 和 XML(Asynchronous JavaScript And XML),開發(fā)hxsfx.ajax庫的主要目的就是希望通過異步加載HTML,從而盡量避免直接在js中寫HTML來刷新頁面內(nèi)容。

          hxsfx.ajax這個庫與jquery的ajax功能基本一致,不過短時間內(nèi)應(yīng)該是寫不到人家那么完善的。哈哈~

          各位小伙伴別問,為什么不用jquery的ajax而要自己再寫一個呢?

          問就是,博主喜歡造輪子。開玩笑了~

          其實(shí)原因是為了減少三方庫的依賴,達(dá)到對項(xiàng)目的全面掌控。

          項(xiàng)目地址:https://github.com/hxsfx/hxsfx_web_tools

          (二)代碼

          要自己開發(fā)一個ajax庫,需要借助Web API接口中的XMLHttpRequest(XHR)對象。

          XMLHttpRequest(XHR)對象用于與服務(wù)器交互。通過 XMLHttpRequest 可以在不刷新頁面的情況下請求特定 URL,獲取數(shù)據(jù)。這允許網(wǎng)頁在不影響用戶操作的情況下,更新頁面的局部內(nèi)容。

          1、在window對象上新建一個hxsfx對象,本系列的所有庫基本都會在hxsfx對象之中:

          //hxsfx.js
          (function () {
              window.hxsfx = {};
          })();

          2、在hxsfx對象的基礎(chǔ)上新建一個ajax對象:

          //ajax.js
          (function () {
              window.hxsfx.ajax = {
              };
          })();

          3、在ajax對象中新建loadHTML方法,設(shè)置兩個參數(shù),分別是ele準(zhǔn)備加載HTML的容器元素和url加載HTML的地址:

          //ajax.js
          (function () {
              window.hxsfx.ajax = {
                  loadHTML: function (ele, url) {
                  }
              };
          })();

          4、在loadHTML方法中新建XMLHttpRequest對象:

          //ajax.js
          (function () {
              window.hxsfx.ajax = {
                  loadHTML: function (ele, url) {
                      const httpRequest = new XMLHttpRequest();
                      httpRequest.open('GET', url, true);
                      httpRequest.onreadystatechange = function () {
                          //為了讓代碼更健壯,使用try...catch來捕獲返回狀態(tài)判斷和處理HTML代碼的異常
                          try {
                              if (httpRequest.readyState === XMLHttpRequest.DONE) {
                                  if (httpRequest.status === 200) {
                                        //在這處理返回的HTML
                                      }
                                  }
                                  else {
                                      console.log("【ajax.get(" + url + ")請求出錯】");
                                  }
                              }
                          }
                          catch (ex) {
                              console.log("【ajax.get(" + url + ")異常】" + ex.message);
                          }
                      };
                      httpRequest.send();
                  }
              };
          })();

          5、為了解決加載HTML緩存的問題,將loadHTML方法中傳入的URL參數(shù)后面加上一個時間戳:

          //ajax.js
          //時間戳用來解決加載頁面緩存的問題
          var urlTimeStamp = "timeStamp=" + new Date().getTime();
          url += ((url.indexOf('?') >= 0) ? "&" : "?") + urlTimeStamp;

          6、【重點(diǎn)】在這處理返回的HTML時,如果直接將HTML加載到容器中,會出現(xiàn)HTML中Javascript代碼不執(zhí)行的問題。解決這個問題,需要將加載的script標(biāo)簽替換為script元素:

          //ajax.js
          ele.innerHTML = httpRequest.responseText;
          var scriptElements = ele.getElementsByTagName("script");
          for (var i = 0; i < scriptElements.length; i++) {
              var scriptElement = document.createElement("script");
              scriptElement.setAttribute("type", "text/javascript");
              var src = scriptElements[i].getAttribute("src");
              if (src) {
                  //因?yàn)榧虞d的src路徑是之前相對加載HTML頁面的,需要修改為當(dāng)前頁面的引用路徑
                  src = url.substring(0, url.lastIndexOf('/') + 1)  + src;
                  src += ((src.indexOf('?') >= 0) ? "&" : "?") + urlTimeStamp;
                  scriptElement.setAttribute("src", src);
              }
              var scriptContent = scriptElements[i].innerHTML;
              if (scriptContent) {
                  scriptElement.innerHTML = scriptContent;
              }
              //用生成的script元素去替換html中的script標(biāo)簽,以此來激活script代碼
              ele.replaceChild(scriptElement, scriptElements[i]);
          }

          7、最后ajax.js完整代碼:

          //ajax.js
          (function () {
              window.hxsfx.ajax = {
                  loadHTML: function (ele, url) {
                      //時間戳用來解決加載頁面緩存的問題
                      var urlTimeStamp = "timeStamp=" + new Date().getTime();
                      url += ((url.indexOf('?') >= 0) ? "&" : "?") + urlTimeStamp;
                      const httpRequest = new XMLHttpRequest();
                      httpRequest.open('GET', url, true);
                      httpRequest.onreadystatechange = function () {
                          //為了讓代碼更健壯,使用try...catch來捕獲返回狀態(tài)判斷和處理HTML代碼的異常
                          try {
                              if (httpRequest.readyState === XMLHttpRequest.DONE) {
                                  if (httpRequest.status === 200) {
                                      ele.innerHTML = httpRequest.responseText;
                                      var scriptElements = ele.getElementsByTagName("script");
                                      for (var i = 0; i < scriptElements.length; i++) {
                                          var scriptElement = document.createElement("script");
                                          scriptElement.setAttribute("type", "text/javascript");
                                          var src = scriptElements[i].getAttribute("src");
                                          if (src) {
                                              //因?yàn)榧虞d的src路徑是之前相對加載HTML頁面的,需要修改為當(dāng)前頁
                                              src = url.substring(0, url.lastIndexOf('/') + 1) + src;
                                              src += ((src.indexOf('?') >= 0) ? "&" : "?") + urlTimeStamp;
                                              scriptElement.setAttribute("src", src);
                                          }
                                          var scriptContent = scriptElements[i].innerHTML;
                                          if (scriptContent) {
                                              scriptElement.innerHTML = scriptContent;
                                          }
                                          //用生成的script元素去替換html中的script標(biāo)簽,以此來激活script代
                                          ele.replaceChild(scriptElement, scriptElements[i]);
                                      }
                                      }
                                  }
                                  else {
                                      console.log("【ajax.get(" + url + ")請求出錯】");
                                  }
                              }
                          }
                          catch (ex) {
                              console.log("【ajax.get(" + url + ")異常】" + ex.message);
                          }
                      };
                      httpRequest.send();
                  }
              };
          })();

          (三)調(diào)用文檔

          1、將hxsfx.js和ajax.js放入Scripts文件夾中的hxsfx文件夾

          2、在Scripts文件夾同級目錄新建index.html頁面

          <!DOCTYPE html>
          <html xmlns="http://www.w3.org/1999/xhtml">
          <head>
              <title>js庫測試</title>
              <script src="Scripts/hxsfx/hxsfx.js"></script>
              <script src="Scripts/hxsfx/ajax.js"></script>
              <script>
                  window.onload = function () {
                          //調(diào)用ajax中的loadHTML方法
                      window.hxsfx.ajax.loadHTML(document.getElementById("ContentContainer"), "Views/test/testPage.html");
                  };
              </script>
          </head>
          <body>
              <div id="ContentContainer"></div>
          </body>
          </html>

          3、在Scripts文件夾同級目錄,首先新建Views文件夾,接著其中新建test文件夾,最后在test文件夾中新建testPage.html

          <style>
              div#TestPageContainer {
                  height: 300px;
                  width: 300px;
                  background-color: #F0F0F0;
              }
          </style>
          <script src="../../Scripts/hxsfx/test/test.js"></script>
          <script>
              function updateBackgroundColor() {
                  try {
                      var backgroundColor = '#' + (Math.floor(Math.random() * 0xffffff).toString(16).padStart(6, '0'));
                      document.getElementById("TestPageContainer").style.backgroundColor = backgroundColor;
                  }
                  catch (ex) {
                      console.log(ex.message);
                  }
              }
          </script>
          <div id="TestPageContainer">
              <button onclick="updateBackgroundColor()">更改背景色</button>
              <button onclick="modifyPFontColor()">更改下面一句話的字體顏色</button>
              <p id="P">這兒是一句話。</p>
          </div>


          最后

          以上內(nèi)容只是hxsfx.ajax庫的開始,后續(xù)的內(nèi)容更新小伙伴可以通過訪問Github項(xiàng)目地址進(jìn)行獲取。

          Query load() 方法

          jQuery load() 方法是簡單但強(qiáng)大的 AJAX 方法。

          load() 方法從服務(wù)器加載數(shù)據(jù),并把返回的數(shù)據(jù)放入被選元素中。

          語法:

          $(selector).load(URL,data,callback);

          必需的 URL 參數(shù)規(guī)定您希望加載的 URL。

          可選的 data 參數(shù)規(guī)定與請求一同發(fā)送的查詢字符串鍵/值對集合。

          可選的 callback 參數(shù)是 load() 方法完成后所執(zhí)行的函數(shù)名稱。

          這是示例文件("demo_test.txt")的內(nèi)容:

          <h2>jQuery AJAX 是個非常棒的功能!</h2><pid="p1">這是段落的一些文本。</p>

          下面的例子會把文件 "demo_test.txt" 的內(nèi)容加載到指定的 <div> 元素中:

          實(shí)例

          $("#div1").load("demo_test.txt");

          也可以把 jQuery 選擇器添加到 URL 參數(shù)。

          下面的例子把 "demo_test.txt" 文件中 id="p1" 的元素的內(nèi)容,加載到指定的 <div> 元素中:

          實(shí)例

          $("#div1").load("demo_test.txt #p1");

          嘗試一下 ?

          可選的 callback 參數(shù)規(guī)定當(dāng) load() 方法完成后所要允許的回調(diào)函數(shù)。回調(diào)函數(shù)可以設(shè)置不同的參數(shù):

          • responseTxt - 包含調(diào)用成功時的結(jié)果內(nèi)容

          • statusTXT - 包含調(diào)用的狀態(tài)

          • xhr - 包含 XMLHttpRequest 對象

          下面的例子會在 load() 方法完成后顯示一個提示框。如果 load() 方法已成功,則顯示"外部內(nèi)容加載成功!",而如果失敗,則顯示錯誤消息:

          實(shí)例

          $("button").click(function(){ $("#div1").load("demo_test.txt",function(responseTxt,statusTxt,xhr){if(statusTxt=="success")alert("外部內(nèi)容加載成功!"); if(statusTxt=="error")alert("Error: "+xhr.status+": "+xhr.statusText); });});


          //HTML code
          //數(shù)據(jù)顯示區(qū)域div--job-homepage-list
          <div class="job-homepage-list" id="job-homepage-list">
               <ul class="clearfix">      
               </ul>
           </div>
          //點(diǎn)擊事件
          <a action-url="/接口地址/job_list_ajax?load_more=1" class="js_more-job">
            查看更多
          </a>
          //js code
          <script>
              // 查看更多
              var clickNum = 1,//默認(rèn)點(diǎn)擊一次  
              url,param,strHtml,isLast,
              $eventList=$('#job-homepage-list'),errorHtml = '出現(xiàn)了網(wǎng)絡(luò)錯誤,請檢查您的網(wǎng)絡(luò)是否正常';
              (function(num){
                  $(document).off('click','.js_more-job').on('click','.js_more-job',function(){
                      num++;
                      var $t = $(this);
                      url = $t.attr('action-url');
                      param = {'page': num};
                      $.ajax({
                          url : url,
                          data: param,
                          dataType : 'json',
                          success : function(r){
                              if(r.code == 0){
                                  strHtml = r.data.list;
                                  isLast = r.data.is_last;
                                  $eventList.append(strHtml);//追加數(shù)據(jù)
                                  if(isLast == 1){
                                      $t.addClass('is-last');
                                  }else{
                                      $t.removeClass('is-last');
                                  }
                              }else{
                                  layer.msg(r.message);
                              }
                          },
                          error : function(){
                              layer.msg(errorHtml);
                          }
                      });
                  });
              })(clickNum);//clickNum
          </script>

          口返回?cái)?shù)據(jù)

          返回的就是布局的ul數(shù)據(jù),追加到指定的div中。


          主站蜘蛛池模板: 国产精品香蕉在线一区| 伦理一区二区三区| 手机看片一区二区| 亚洲天堂一区二区| 国产一区二区三区在线观看免费 | 国产在线精品一区二区三区直播| 中文字幕乱码人妻一区二区三区| 国产精品视频一区二区三区四 | 国产成人亚洲综合一区| 国产精华液一区二区区别大吗 | 性色av闺蜜一区二区三区| 无码AV中文一区二区三区| 亚洲午夜福利AV一区二区无码| 一级毛片完整版免费播放一区 | 国产精品毛片一区二区| 国产一区二区三区在线看片| 久久人妻无码一区二区| 秋霞日韩一区二区三区在线观看 | 中文字幕无码免费久久9一区9| 高清一区二区在线观看| 日韩动漫av在线播放一区| 国产一区精品视频| 一区二区三区无码高清| 色系一区二区三区四区五区| 婷婷亚洲综合一区二区| 国产一区二区三区免费看| 国产精品一区二区综合| 亚洲国产成人久久综合一区77| 无码人妻AⅤ一区二区三区水密桃| 国产一区风间由美在线观看| 人妻体内射精一区二区| 亚洲色婷婷一区二区三区| 亚洲av无码一区二区乱子伦as | 狠狠综合久久av一区二区| 国产一区二区三区内射高清| 99精品久久精品一区二区| 熟妇人妻AV无码一区二区三区| 91福利一区二区| 国产裸体舞一区二区三区| 日本精品一区二区三区在线视频一 | 国产一区二区三区不卡在线观看 |