real47LEBJ 2023-01-04 14:12 采纳率: 95.7%
浏览 51
已结题

封装后的POST请求的内部函数返回值如何被外部访问

下面是封装的post请求。 res在内部函数中,如何被openPost()访问并返回,调用时需要用到res的值

//POST请求
function openPost(url, data) {
  let xhr = new XMLHttpRequest();
  xhr.open("post", url);
  xhr.setRequestHeader("Content-Type", "application/json");
  xhr.send(JSON.stringify(data));
  
  xhr.onload = function () {
    var res = JSON.parse(xhr.response);
    if (res.code == 2000) {
      console.log(res);
    } else {
      console.log("请求" + url + "失败");
    }
  }; 
}

下面是调用

 var data = {
                        username: getCookie("username"),
                        sessionId: getCookie("sessionId"),
                        flag: this.flag,
                        id: parseInt(this.id),
                    };
                    var url = "/cgi-bin/software";
                    openPost(url, data);

  • 写回答

4条回答 默认 最新

  • web修理工 2023-01-04 14:53
    关注

    方法一:回调函数

    
    
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>查看物流</title>
    
    </head>
    
    <body>
      <script>
        //POST请求
        function openPost(url, data,callback) {
          let xhr = new XMLHttpRequest();
          xhr.open("post", url);
          xhr.setRequestHeader("Content-Type", "application/json");
          xhr.send(JSON.stringify(data));
    
          xhr.onload = function () {
            var res = JSON.parse(xhr.response);
            if (res.code == 2000) {
              if(typeof(callback)=='function'){
                callback(res)
              }
              console.log(res);
            } else {
              if(typeof(callback)=='function'){
                callback('失败')
              }
              console.log("请求" + url + "失败");
            }
          };
        }
    
        var data = {
          username: getCookie("username"),
          sessionId: getCookie("sessionId"),
          flag: this.flag,
          id: parseInt(this.id),
        };
        var url = "/cgi-bin/software";
    
        openPost(url, data,function(data){
          console.log(data,'===123')
        });
      </script>
    </body>
    
    </html>
    

    方法二

    
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <title>查看物流</title>
    
    </head>
    
    <body>
      <script>
        //POST请求
        function openPost(url, data) {
          return new Promise((reslove, reject) => {
            let xhr = new XMLHttpRequest();
            xhr.open("post", url);
            xhr.setRequestHeader("Content-Type", "application/json");
            xhr.send(JSON.stringify(data));
    
            xhr.onload = function () {
              var res = JSON.parse(xhr.response);
              if (res.code == 2000) {
                reslove(res)
                console.log(res);
              } else {
                reject('失败')
                console.log("请求" + url + "失败");
              }
            };
          })
    
        }
    
        var data = {
          username: getCookie("username"),
          sessionId: getCookie("sessionId"),
          flag: this.flag,
          id: parseInt(this.id),
        };
        var url = "/cgi-bin/software";
    
        openPost(url, data).then(res=>{
          console.log(res)
        }).catch(err=>{
          console.log(err)
        });
      </script>
    </body>
    
    </html>
    
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

问题事件

  • 系统已结题 1月12日
  • 已采纳回答 1月4日
  • 创建了问题 1月4日

悬赏问题

  • ¥15 求指导ADS低噪放设计
  • ¥15 CARSIM前车变道设置
  • ¥50 三种调度算法报错 有实例
  • ¥15 关于#python#的问题,请各位专家解答!
  • ¥200 询问:python实现大地主题正反算的程序设计,有偿
  • ¥15 smptlib使用465端口发送邮件失败
  • ¥200 总是报错,能帮助用python实现程序实现高斯正反算吗?有偿
  • ¥15 对于squad数据集的基于bert模型的微调
  • ¥15 为什么我运行这个网络会出现以下报错?CRNN神经网络
  • ¥20 steam下载游戏占用内存