javascript - 无法在 Jquery 中保存获取的数据
问题描述
我正在处理我的前端,我遇到了一个障碍。我正在尝试从后端获取数据,它实际上是在获取数据。但只有在其他一切之后?我会给你看。
$(function(){
function GetURLId() {
var url = window.location.href;
var path = url.substring(url.lastIndexOf('/') + 1);
var id = path.substring(path.lastIndexOf('?id=') + 4, path.lastIndexOf("?id") + 5)
return id;
}
var url = 'https://localhost:5001/api/rental/byId/' + GetURLId();
fetch(url)
.then((resp) => resp.json())
.then(function(data) {
Object.keys(data).forEach(key => {
console.log(`${key}: ${data[key]}`);
})
});
});
所以首先我从 URL 中得到我正在使用的 id。那么问题出在它下面的代码。我可以在控制台中获取我的数据。记录这个:
id: 2
status: "Open"
damage: true
所以数据实际上是从我的后端获取的。但是现在,每次我尝试保存数据时,它都未定义。我试过了:
$(function(){
var rental = []; // Added an array
var url = 'https://localhost:5001/api/rental/byId/' + GetURLId();
fetch(url)
.then((resp) => resp.json())
.then(function(data) {
Object.keys(data).forEach(key => {
console.log(`${key}: ${data[key]}`);
rental.push(rental[key] = data[key]);
})
});
console.log(rental['id']); // Returns undefined
});
和:
var rental = []; // Added an array outside of the function
$(function(){
var url = 'https://localhost:5001/api/rental/byId/' + GetURLId();
fetch(url)
.then((resp) => resp.json())
.then(function(data) {
Object.keys(data).forEach(key => {
console.log(`${key}: ${data[key]}`);
rental.push(rental[key] = data[key]);
})
});
console.log(rental['id']); // Returns undefined
});
但!最后一个是在函数之外租用的,我实际上可以在控制台中调用它。在控制台中,它实际上确实返回了值。
Inside Console:
> rental["id"]
< 2
最后,我尝试检查 fetch 中键和值的值,如下所示:
$(function(){
var url = 'https://localhost:5001/api/rental/byId/' + GetURLId();
fetch(url)
.then((resp) => resp.json())
.then(function(data) {
Object.keys(data).forEach(key => {
if(key == "status" && data[key] != "Reserved") {
console.log(`${key}: ${data[key]}`); // Returns damage: undefined 3 times
}
})
});
});
但这也行不通。它在控制台中返回伤害:未定义 3 次。
因此,如果有人知道这里发生了什么,那就太棒了!
提前非常感谢。
解决方案
答案:我的代码中有 2 个错误。- 首先,我没有正确考虑代码的异步性质。- 其次,当试图用另一个修复它时,然后阻止并在那里执行我的代码。我没有在进程 then 块中返回值,而是返回了 forEach。
fetch(url)
.then(resp => resp.json())
.then(data => {
var rentalStatus;
Object.keys(data).forEach(key => {
rental[key] = data[key];
if(key == "status") {
rentalStatus = data[key];
}
})
return rentalStatus;
})
.then(rentalStatus => {
console.log(rental["id"]); // This does return the id now!
if(rentalStatus == "Reserved") {
$("#assign-items").removeClass("d-none");
}
}).catch(error => {
console.log("Error:" + error);
});
推荐阅读
- android - Android Studio - 应用程序不会在模拟器中打开未修改的基本应用程序模板
- c++ - 将 Visual C++ Media Foundation Capture 应用程序转换为 C++ Builder
- git - Git mv 命令导致 GitHub 中的添加/删除计数发生变化
- python - 确认html表格中的动态文本后单击复选框
- php - 为什么 GAE 开发本地连接云 sql 慢?
- python - 如何从 def(main) 调用函数:def(dot) 和 def(dice)?
- google-sheets - 如何使用 ImportXML 在多个类中提取文本?
- c++ - RocksDb:每个键有多个值(c++)
- sql - SQL中的自增主键
- python - Pyculib ImportError:无法导入名称配置