jquery - 从另一个 .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
文件中获取信息/数组返回?
解决方案
它不起作用,因为在 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);
});
});
推荐阅读
- python - Pythonic 方法来检查超时条件?
- react-native - Paytm 无法在 React Native 中使用生产 API 密钥
- rebus - Rebus saga 在多个处理程序之间拆分
- rascal - 将列表附加到列表列表时,Rascal 会擦除类型信息
- r - R plm lag() 忽略面板结构
- tfs - TFS 2018 服务器设置
- java - Java中的XML XSD到AVRO avsc映射
- c# - MailKit Connect 无反应
- racket - 为什么定义语法 my-class 中只有一种方法?
- javascript - 阻止我的 div 的 onClick 处理程序的段落标记