1. 程式人生 > >AJAX請求進行客戶端渲染

AJAX請求進行客戶端渲染

// 什麼是ajax? 非同步的JavaScript和xml,英文全稱async javascript and xml
// AJAX的好處?並不能提高程式執行的效能,但是可以防止頁面阻塞,實現無重新整理效果,增強了使用者體驗

// ajax中有很多,原生js中有一個xmlhttprequest物件是專門負責非同步請求。
// 還是jQuary中的$.ajxa(),$,get(),$.getJSON,$.post()等還有ES6中的豐田車,axios.js指令碼庫中也有ajax請求方法

百度詞條

Ajax 即“Asynchronous Javascript And XML”(非同步 JavaScript 和XML),是指一種建立互動式網頁應用的網頁開發技術。
Ajax = 非同步 JavaScript 和 XML(標準通用標記語言的子集)。
Ajax 是一種用於建立快速動態網頁的技術。
Ajax 是一種在無需重新載入整個網頁的情況下,能夠更新部分網頁的技術。

簡單說:無需重新整理就可以更新頁面資料

例項:
ajax請求進行客戶端渲染

ajax請求資料再渲染到檢視上
在這裡插入圖片描述

router/index.js

// 在Node中每一個js檔案的作用域都是獨立的,當前js檔案中的變數,方法只在當前js檔案中有效,這一點一定和瀏覽器區分。即使外層的index.js已經引入了express模組,在當前router/index.js中也不能使用,要想在當前router/index.js中使用express模組,必須重新引入。
// 在瀏覽器端,如果一個HTML文件同時引用兩個js檔案,這兩個js檔案中的全域性檔案是共享的
var express = require("express");

    // 先建立一個路由例項
    var route = express.Router();

// 通過路由例項來建立一條“路”,建立一個API介面(application program interface應用程式介面)
   /* alt shift a切換塊註釋 */
   
/* "路"有以下常用的:
get()客戶端向伺服器端獲取資訊(搜尋,在瀏覽器位址列中輸入url地址並回車,發起的也是get請求)
post()客戶端向伺服器端提交資訊(註冊使用者新增購物車)
put()客戶端修改伺服器端資訊
delete() 客戶端要刪除伺服器的資訊

如果一個專案的介面滿足這四種請求方式,我們稱它是RESTFUL風格的介面
*/
// 第一個引數的路由器的路徑(名字),第二個引數是路由的業務邏輯(回撥函式)
// req=request負責請求,站在客戶端的角度
// res=response負責響應,站在伺服器端的角度
// next轉到下一個網線
route.get("/order",function(req,res,next){
     //res.send("我是訂單列表頁面");
    // 此方法有硬程式碼,寫死了
    // res.sendFile("C:/Users/ASUS/Desktop/yft/上課程式碼/2018.8.13使用express手動建立專案/public/order.html");
    // 此種方法還不是最好的
    res.sendFile(__dirname.replace('router','')+"./public/order.html");
    // __dirname="C:/Users/ASUS/Desktop/yft/上課程式碼/2018.8.13使用express手動建立專案/router"
    // 後面介紹的render
    // res.render();
});

route.get("/order/detail",function(req,res,next){
    res.send("我是訂單詳情頁面");
});

    route.get("/api/getData",function(req,res,next){
        res.json({
            code:200,
            message:"成功",
            content:"我是更改後的內容。"
        })
    });


    // 把路由匯出
    module.exports = route;

/* 路徑:
相對路徑:如果一個路徑是/開頭的,表示當前執行檔案所在的碟符的根目錄

如果一個路徑是以./開頭的或者直接以檔案(夾)名字開頭,表示當前執行的js檔案所在的目錄 

如果一個路徑以../開頭,表示當前路徑的上層目錄
*/
// 訪問http://localhost:3000/order/detail

order.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="script/jquery.js"></script>
</head>
<body>
    <h1>我是訂單列表頁面2</h1>
    <button id="btnChange">更改標題</button>
    <script>
        // $(document).ready(function(){})
        $(function(){
            $("#btnChange").click(function(){
             // 1.從介面中獲取資料     
           /*  res.json({
                code:200,
                message:"成功",
                content:"我是更改後的內容。"
            })  */
                // alert("fdv");
                
        // ------------------------------方法1-------------------------
             
            $.get("/api/getData",function(data,textStatus,xhr){
                // router的index.js寫route.get。。
                console.log(data);
                console.log(textStatus);
                console.log(xhr);
                // 更改元素內容
                $("h1").text(data.content);
            }) 
            // 不會阻塞下方程式碼的執行
            console.log("這行程式碼什麼時候執行");//先執行
           
               
                // 建立xhr物件(非同步請求物件)

        //-------- -------------------方法2-------------------------------
            /*     var xhr = new XMLHttpRequest();
                // 使用非同步物件開啟遠端連線
                // 第一個引數是請求方式:GET,POST,PUT,DELETE
                // 第二個引數是請求的介面地址:"/api/getData" 
                xhr.open("GET","/api/getData");
                //客戶端開始傳送請求,如果要攜帶資料 ,請在send方法中傳值
                xhr.send();

                // 客戶端需要接收伺服器端的響應
                // 發起監聽
                xhr.onreadystatechange = function(){
                    // 當狀態為200時,表示成功,xhr.readyState表示資料已經準備好
                    if(xhr.status === 200 && xhr.readyState === 4)
                    // console.log(xhr);
                    console.log(xhr.responseText);
                    // JSON.parse()把一個字串解析成js物件,方便打點呼叫
                    var data = JSON.parse(xhr.responseText);
                    $('h1').text(data.content); 
   
                }      */           

        //-------- -------------------方法3-------------------------------
                // 使用$.ajax()是對xmlhttprequest物件的封裝
                // $.get()是對$.ajax()的進一步封裝
            /*     $.ajax({
                    method:"GET",
                    url:"/api/getData",
                    // 請求成功時回撥的函式
                    success:function(data){
                        console.log(data);
                        $('h1').text(data.content);
                    },
                    // 失敗時執行的回撥函式
                    error:function(err){
                        console.log(err);
                    }
                }) */
                
        //-------- -------------------方法4------------------------------
                // $.getJSON()是專門用來請求JSON格式的資料
            /*     $.getJSON("/api/getData",function(data){
                    $('h1').text(data.content); 
                }) */
            }) 
        })
    </script>
</body>

</html>