首页 > 解决方案 > 从另一个 .js 中应用于 API 的函数获取结果

问题描述

我想做这么简单的事情(假设我想要第一个元素)。该函数getRooms定义在另一个.js

 $(document).ready(function() {
   $("#title").text(api.rooms.getRooms()[0]); //DOESNT WORK
 });

我有另一个名为api.js的文件,其中包含以下内容:

var api = class {
    static get baseUrl() {
    return "http://127.0.0.1:8080/api/";
  }

  static get timeout() {
    return 60 * 1000;
  }
}

api.rooms = class {
  static get url() {
    return api.baseUrl + "rooms/";
  }

  static getRooms() {
       return $.ajax({
            url: api.room.url,
            method: "GET",
            dataType: "json",
            timeout: api.timeout
             .then(function(data) {
                 data.rooms.map(item => item.name);
               })

          }); 
    }
}

如何getRooms()在我的其他.js文件中获取信息/数组返回?

标签: jqueryjsonajax

解决方案


它不起作用,因为在 getRooms() 中,使用了 then() 函数,它返回一个 jQuery 承诺(阅读 jQuery 承诺以了解为什么需要这样做)。基本上,由于 $.ajax 调用是异步的,它不能简单地立即返回操作的结果。所以promise就是用来实现这个的。您的代码应如下所示:

$(document).ready(function() {
    $("#title").text(api.rooms.getRooms().done(function(data) {
        console.log(JSON.stringify(data));
    }).fail(function(jqXHR, textStatus, errorThrown) {
        console.log("Request failed: jqXHR.status=" + jqXHR.status + ", textStatus=" + textStatus + ", errorThrown=" + errorThrown);
    });
});

推荐阅读