js函数中变量未取得值就返回

 <script type="text/javascript">
        let xx;
         function updateData() {
            let x;
            x=receiveData();
            console.log('收到的x的值为:'+x);
            // 添加了多个新行并加入数据
            useData(x);
        }
        function receiveData() {
            $.get("/ShangCheng_war_exploded/data", function (data) {   //获取成功执行的方法
                window.alert('接受到异步请求数据:' + JSON.stringify(data))  //弹窗展示数据
                xx = data;
            });
            alert(xx);
            return xx;
        }
        function useData(x) {
            let tbody = document.getElementById("tbody")
            for (let a = 0; a < x.length; a++) {
                let row = getRow(x[a]);
                // alert(x[a].length);
                tbody.append(row);
            }
        }
        function getRow(w) {
            let trow = document.createElement("tr");
            let input = document.createElement("input");
            input.setAttribute("type", "checkbox");
            trow.append(input);
            let hang = ["name", "author", "store", "money", "date"];
            for (let qq = 0; qq < hang.length; qq++) {
                let td = document.createElement("td");
                td.innerHTML = w[hang[qq]];
                trow.appendChild(td);
            }
            return trow;
        }
    </script>

问题背景:
第一次调用receiveData()函数时,xx总是打印的unfined然后直接返回,需要再调用一次该函数才能使xx得到get函数里的数据,为什么啊?

$.ajaxSettings.async = false;
添加上面这一句。
让 ajax请求变成同步的。

异步请求 和同步请求 搞清楚是什么东西

img

不要在异步代码里面使用 return ,如果有必要的话执行一下回调函数

 <script type="text/javascript">
        let xx;
         function updateData() {
            let x;
            receiveData(function(data){
              x=data
            console.log('收到的x的值为:'+x);
            // 添加了多个新行并加入数据
            useData(x);
          });

        }
        function receiveData(cal) {
            $.get("/ShangCheng_war_exploded/data", function (data) {   //获取成功执行的方法
                window.alert('接受到异步请求数据:' + JSON.stringify(data))  //弹窗展示数据
                cal(data)
            });

        }
        function useData(x) {
            let tbody = document.getElementById("tbody")
            for (let a = 0; a < x.length; a++) {
                let row = getRow(x[a]);
                // alert(x[a].length);
                tbody.append(row);
            }
        }
        function getRow(w) {
            let trow = document.createElement("tr");
            let input = document.createElement("input");
            input.setAttribute("type", "checkbox");
            trow.append(input);
            let hang = ["name", "author", "store", "money", "date"];
            for (let qq = 0; qq < hang.length; qq++) {
                let td = document.createElement("td");
                td.innerHTML = w[hang[qq]];
                trow.appendChild(td);
            }
            return trow;
        }
    </script>


因为 接口需要 时间啊 异步的

  function receiveData() {
           return $.get("/ShangCheng_war_exploded/data", function (data) {   //获取成功执行的方法
                window.alert('接受到异步请求数据:' + JSON.stringify(data))  //弹窗展示数据
               return  xx = data;
            });
     
        }

可以这样写 。