JavaScript-从firebase检索数据不起作用

JavaScript-从firebase检索数据不起作用,javascript,firebase,firebase-realtime-database,Javascript,Firebase,Firebase Realtime Database,我现在使用Firebase的应用程序有问题。不知何故,我所使用的路径工作不好 Vacunas数据库不工作: 这是我在firebase上的数据库 我想检查数据库中是否存在用户介绍的号码。不知何故,这段代码不起作用,它没有进行rootRefVerification.on('value'),我不明白为什么 $("#buscar_vacuna").click( function(){ var numero_buscar = $("#numero_buscar").val()

我现在使用Firebase的应用程序有问题。不知何故,我所使用的路径工作不好

Vacunas数据库不工作:

这是我在firebase上的数据库

我想检查数据库中是否存在用户介绍的号码。不知何故,这段代码不起作用,它没有进行rootRefVerification.on('value'),我不明白为什么

$("#buscar_vacuna").click(

    function(){

        var numero_buscar = $("#numero_buscar").val();

        var rootRefVerificacion = firebase.database().ref('vacunas');

        var existencia2;

         //busqueda de numero de animal para saber si existe
        rootRefVerificacion.on('value', function(snapshot){
            existencia2 = snapshot.child(numero_buscar).exists();
        })

        console.log(existencia2);

        if(numero_buscar == ""){
            $("#numero_buscar").addClass("is-invalid");
            $('#detalles').slideUp(1000);
        }else if(existencia2 == false){
            alert('Animal ' + numero_buscar + ' no tiene vacunas');
            $("#numero_buscar").addClass("is-invalid");
            $("#numero_buscar").val('');
            $('#detalles').slideUp(1000);
        }else{
我认为这与路径有关,因为当我将路径从
'vacunas'
更改为
'inventario'
(查看下图)时,它运行良好

Inventario数据库运行良好:


希望有人能帮助我。

您使用的不正确。您正在使用整数0初始化
existencia2
,但在您的代码中,您正在为其分配一个使用exists返回的布尔值。请更改这部分代码

     //busqueda de numero de animal para saber si existe
    rootRefVerificacion.on('value').then(snapshot => {
        existencia2 = snapshot.child(numero_buscar).exists();
        if(numero_buscar == ""){
            $("#numero_buscar").addClass("is-invalid");
            $('#detalles').slideUp(1000);
        }else if(existencia2 == false){
            alert('Animal ' + numero_buscar + ' no tiene vacunas');
            $("#numero_buscar").addClass("is-invalid");
            $("#numero_buscar").val('');
            $('#detalles').slideUp(1000);
        }
    })

检查此代码,以便使用
rootrefVerification.on('value')中的回调异步处理代码。函数(快照){
将异步调用,因此您的代码实际上是在它存在之前尝试获取
snapshot.child(numero_buscar).exists()的值

只需将代码移到回调中即可

$("#buscar_vacuna").click(

function(){

    var numero_buscar = $("#numero_buscar").val();

    var rootRefVerificacion = firebase.database().ref('vacunas');

    var existencia2 = 0

     //busqueda de numero de animal para saber si existe
    rootRefVerificacion.on('value', function(snapshot){
        existencia2 = snapshot.child(numero_buscar).exists();
        console.log(existencia2);

        if(numero_buscar == ""){
            $("#numero_buscar").addClass("is-invalid");
            $('#detalles').slideUp(1000);
        }else if(existencia2 == false){
            alert('Animal ' + numero_buscar + ' no tiene vacunas');
            $("#numero_buscar").addClass("is-invalid");
            $("#numero_buscar").val('');
            $('#detalles').slideUp(1000);
        }else{
    });

RootRefVerification.on
的回调被异步调用-因此
console.log(existencia2);
将始终输出0,因为没有任何东西可以更改它(但)请同时添加
Inventario
代码..!您的代码使用
ref(“vacunas”)
,但您的JSON显示的是
Inventario
。代码和JSON必须匹配,因此
ref(“Inventario”)
@frankvanpoffelen注意到OP发布了两次JSON。第一个1显示
vacunas
,第二个显示
Inventario
。OP说它只在后一种情况下有效。有两件事试图使用
rootrefverification
函数(如果
numero\b)来控制
snapshot
返回的
uscar
为空,就像您在代码中签入一样,它返回false。我已将初始化的代码
existencia2
编辑为false作为默认值。如果快照存在。它将设置为true。可以使用firebase使用
返回的承诺。然后
。并使用您的代码在
中初始化值,然后
使其异步nousIt现在可以工作了。谢谢。但是,为什么使用我发布的代码,它只需要将路径从“vacunas”更改为“inventario”就可以工作呢?