我学习了有关使用ASP.NET Core MVC进行CRUD的教程,并且能够运行该项目.它列出、添加、编辑和删除SQL Server数据库中的表中的员工.然后,为了提高我的技能,我决定将Telefono(电话号码)对象的变量列表添加到Empleado(Employee)" struct "中,这些对象存储在数据库的另一个表中,并通过idEmpleado FK链接到它自己的Empleado对象.因此,每个Empleado可以链接到0、1或更多的Telefono对象.该项目的后端都非常完美.我的问题来自于JavaScript代码.下面我展示了读取HttpGet请求(来自数据库的员工列表)的函数,我添加了一个函数来读取每个Empleado的Telefono的变量列表(我已经判断了C#方法执行得很好),以便将电话号码添加到员工列表的单元格中的(下拉列表),但该函数总是返回一个空数组对象.我在那里读到,您只能调用响应.json()一次,但是即使我从我的函数中的另一个函数调用它?不管是什么,谁能告诉我怎么解决这个问题? 请不要将我的问题标记为糟糕或错误或任何其他.以前有人这样做过,我被这个网站威胁说不能再问了.我只是一名SSR桌面应用程序和视频游戏开发人员,我想学习网络开发,我会尽我所能提出我的问题.如果这个问题有什么不清楚的地方,请告诉我,我会尽量澄清的. 非常感谢!

    // loads Employee list and builds the list in the front end
function MostrarEmpleados() {
    var telefonos = [];
    var className, i = 0;

    fetch("/Home/listaEmpleados")
        .then(response => {
            return response.ok ? response.json() : Promise.reject(response)
        })
        .then(responseJson => {
            if (responseJson.length > 0) {
                $("#tablaEmpleados tbody").html("");

                i = 0;
                responseJson.forEach((empleado) => {

                    className = "telefonos" + i;
                    $("#tablaEmpleados tbody").append(
                        $("<tr>").append(
                            $("<td>").text(empleado.nombreCompleto),
                            $("<td>").addClass(className),
                            $("<td>").text(empleado.refDepartamento.nombre),
                            $("<td>").text(empleado.sueldo),
                            $("<td>").text(empleado.fechaContrato),
                            $("<td>").append(
                                $("<button>").addClass("btn btn-primary btn-sm boton-editar-empleado").text("Editar").data("dataEmpleado",empleado),
                                $("<button>").addClass("btn btn-danger btn-sm ms-2 boton-eliminar-empleado").text("Eliminar").data("dataEmpleado",empleado),
                            )
                        )
                    )
                    telefonos = ObtenerTelefonos(empleado.idEmpleado); // always returns empty array
                    $("." + className).append(
                        $("<select>").addClass("listaTels")
                    );
                    telefonos.forEach((telefono) => {
                        $(".listaTels").append(
                            $("<option>").text(telefono.descripcion + ": " + telefono.numero)
                        )
                    })
                    i++;
                })
            }
        })
}

下面我展示了从特定Empleado获取Telefono变量列表的函数.总是返回空array.

function ObtenerTelefonos(id) {

    var telefonos = [];

    fetch(`/Telefono/listaTelefonos?idEmpleado=${id}`)
        .then(response => {
            return response.ok ? response.json() : Promise.reject(response)
        })
        .then(responseJson => {
            if (responseJson.length > 0) {

                responseJson.forEach((telefono) => {
                    telefonos.push({
                        idTelefono: telefono.idTelefono,
                        descripcion: telefono.descripcion,
                        numero: telefono.numero,
                        idEmpleado: telefono.idEmpleado
                    });
                })
            }
        })
    return telefonos;
}

推荐答案

您将在填充数据之前返回telefonosarray.您需要等待数据返回.

您需要将其转换为Promise,然后等待数据从FETCH函数返回.然后,您可以在另一个函数中获得响应,您可以将其包装在.then中,以使用来自其他函数的响应.

telefonos = ObtenerTelefonos(empleado.idEmpleado);-->;更改为ObtenerTelefonos(empleado.idEmpleado).then(telefonos => {...code here})

function ObtenerTelefonos(id) {
    return fetch(`/Telefono/listaTelefonos?idEmpleado=${id}`)
        .then(response => {
            return response.ok ? response.json() : Promise.reject(response)
        })
        .then(responseJson => {
            const telefonos = [];
            if (responseJson.length > 0) {
                responseJson.forEach((telefono) => {
                    telefonos.push({
                        idTelefono: telefono.idTelefono,
                        descripcion: telefono.descripcion,
                        numero: telefono.numero,
                        idEmpleado: telefono.idEmpleado
                    });
                })
            }
            return telefonos;
        })
}

Javascript相关问答推荐

我可以后增量超过1(最好是内联)吗?

如何使用JavaScript动态地将CSS应用于ToDo列表?

用户单击仅在JavaScript中传递一次以及其他行为

强制执行useStatego struct 化变量[foo,setFoo]的命名约定?

可以的.是否可以在不预编译的情况下使用嵌套 Select 器?

在分区内迭代分区

在React中获取数据后,如何避免不必要的组件闪现1秒?

模块与独立组件

如何解决CORS政策的问题

react—router v6:路由没有路径

setcallback是什么时候放到macrotask队列上的?

在286之后恢复轮询

用于编辑CSS样式的Java脚本

Html文件和客户端存储的相关问题,有没有可能?

从包含数百行的表中获取更改后的值(以表单形式发送到后端)的正确方法是什么?

如何通过将实例方法的名称传递给具有正确类型的参数的继承方法来调用实例方法?

使用Google API无法进行Web抓取

使用VUE和SCSS的数字滚动动画(&;内容生成)

如果一个字符串前面有点、空格或无字符串,后面有空格、连字符或无字符串,则匹配正则表达式

使每个<;li>;元素的 colored颜色 与随机生成的 colored颜色 列表不同(不重复