【问题标题】:How do I get result from function with a get request?如何通过 get 请求从函数中获取结果?
【发布时间】:2018-09-09 13:32:26
【问题描述】:

我有一段代码在函数中向我网站的另一部分提交 GET 请求。

function getStatus(ID) {
    $.get('/api/'+ID+'/info', function(statusCallback) {
        return statusCallback;
    });
}

console.log(getStatus(ID));

我希望这段代码返回然后记录我需要的信息。

我在控制台日志中实际得到的是

undefined

我该怎么做才能得到实际结果?

【问题讨论】:

    标签: javascript function post get request


    【解决方案1】:

    您正在执行异步操作。在你的情况下使用回调。如果你想打印statusCallback,你必须像 Christos 提到的那样 console.log 它。

    还有

    console.log(getStatusId())
    

    将返回undefined,因为它是从没有显式返回的函数返回的默认值。您的函数没有 return 语句,它只是调用一些异步方法。

    顺便说一句,如果可以的话,尝试使用 Promise 而不是回调;)

    【讨论】:

      【解决方案2】:

      在 ES7 中你可以使用异步等待

      async function getStatus(ID) {
        $.get('/api/'+ID+'/info', function(statusCallback) {
          // This is executed in the future, but await knows how to deal with it
          return statusCallback;
        });
      }
      console.log(await getStatus(ID));
      

      这是一个很好的入门实践,因为代码更容易阅读。

      【讨论】:

      • 这个不行,await不知道怎么处理,不是promise
      • 是的,只有当我们从 getStatus 返回一个承诺时它才会起作用。 async/await 只是(或不仅仅是)承诺之上的语法糖。
      【解决方案3】:

      你需要改变你的功能如下:

       function getStatus(ID) {
           $.get('/api/'+ID+'/info', function(statusCallback) {
               console.log(statusCallback);
           });
       }
      

      作为 get 调用的第二个参数传递的函数称为成功回调。一旦在每次调用getStatus 函数时发出的get 请求成功完成,它将被调用。只有这样您才能访问服务器返回的内容,并且您可以像上面一样轻松访问它。

      更新

      如果你想返回服务器发送的数据,你必须先声明一个变量

      function getDataById(ID){
         function callback(data){
             return data;
         }
      
         $.get('/api/'+ID+'/info', function(data) {
             return callback(data);
         });
      }
      

      【讨论】:

      • 使用这意味着我将无法使用请求中的任何信息。它只会记录它。还是谢谢
      • 从您的帖子中,我了解到您只想将得到的响应登录到控制台。你想达到什么目标?
      • 我想返回数据,以便我可以将其视为字符串,例如
      猜你喜欢
      • 2018-12-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-01
      • 1970-01-01
      相关资源
      最近更新 更多