在使用 Vue 後,開始思考要怎麼做 AJAX 功能,上網查了資料,發現比較多人推 Axios 這套,於是試著寫了 demo code,其實用法不難,只是實際執行時會遇到小問題,以下是這次試用 Axios 的筆記。

首先是 libman.json 的設定

{
  "version": "1.0",
  "defaultProvider": "cdnjs",
  "libraries": [
    {
      "library": "vue@3.2.33",
      "destination": "wwwroot/lib/vue/"
    },
    {
      "library": "axios@1.0.0-alpha.1",
      "destination": "wwwroot/lib/axios"
    }
  ]
}

再來是 package.json

{
  "version": "1.0.0",
  "name": "asp.net",
  "private": true,
  "devDependencies": {
    "@babel/types": "7.17.0",
    "@types/vue": "2.0.0",
    "axios": "1.0.0-alpha.1"
  }
}

最後是 Axios 在 Get 及 Post 的用法:

let v = defineComponent({
    name: "app2",
    data() {
        return {
            x: "aaa3",
            y: "aaa4",
            exchange: "test message",
            n1: 1,
            n2: 3,
        };
    },
    methods: {
        AJAX: function (): void {
            let url: string = "/Home/GetJSON";
            ax.default.get<JSONData>(url, {
                headers: {
                    Accept: 'application/json',
                },
            }).then(function (data) {
                let result: JSONData = data.data;
                console.log("name: " + result.name);
            });

        },
        AJAXPOST: function (): void {
            let url: string = "/Home/PostJSONData";
            let postData: JSONData = new JSONData();
            postData.name = "Peter";
            postData.age = 30;
            ax.default.post<JSONData>(url, postData, {
                headers: {
                    Accept: 'application/json',
                },
            }).then(function (data) {
                let result: JSONData = data.data;
                console.log("age: " + result.age);
            });
        },
    },
    mounted: function () {
        console.log("App name:" + this.$options.name);
        let divScripts = document.getElementById("dynamicScript");
        let newScript = document.createElement('script');
        newScript.src = 'https://cse.google.com/cse.js?cx=007968012720720263530:10z7awj2l37';
        divScripts.appendChild(newScript);
    }
});

前端的寫法:

<script type="importmap">
    { "imports": {
      "vue": "/lib/vue/vue.esm-browser.js",
      "axios": "/lib/axios/esm/axios.js"
    } }
</script>

<script type="module" src="~/js/app.js"></script>

<script type="module">
    import { GetVueObject} from "./js/app.js";
    var vueApp = GetVueObject("#app");
    vueApp.AJAX();
    vueApp.AJAXPOST();
</script>

參考資料