为什么我的代码中的数组未定义?

时间:2014-04-02 22:08:46

标签: javascript jquery arrays undefined

执行以下代码时,firebug告诉我:msj [0]未定义是什么问题?

我想要做的是每次在每次运行后收到响应时,在调用msg之后在数组中捕获它以生成单个警报以一起向我显示所有答案...

我不明白为什么我显示undefined如果数组有数据,在这种情况下有三个数据..

var msj = [];

for (var a = document.querySelectorAll('table.inventory tbody tr'), i = 0; a[i]; ++i) {
    // get inventory row cells
    cells = a[i].querySelectorAll('span:last-child');
    // buscar la selecion del concepto
    var opciones = cells[0].querySelectorAll('option:checked');
    var value_concept = opciones[0].value;
    // set price as cell[2] * cell[3]
    var Uno = value_concept;
    var Dos = cells[1].innerHTML ;
    var Tres = parseFloatHTML(cells[2]);
    var Cuatro = parseFloatHTML(cells[3]);
    var Cinco = parseFloatHTML(cells[4]);

    var id_fac = id_fac_select;
    var valor_fac = costo_fac_select.split(".");
    var valor_fact = valor_fac[0];
    var valor_recibo = Cinco;

    $.ajax({
        url:"js.php",
        cache:false,
        type:"POST",
        data:{concepto:Uno,descripcion:Dos,valor_total:Tres,valor_pagado:Cuatro,valor_f:valor_fact,saldo_pendiente:valor_recibo,numero_factura:id_fac,id_estudiante:id_student},
        success:function(result)
        {   
            msj.push(result);               
        }
        });

}
console.log(msj);
alert(msj[0]);

2 个答案:

答案 0 :(得分:2)

您在undefined中看到alert(),因为msj没有数据 尚未 。在浏览器收到服务器的响应之前,不会调用填充msj的代码,但会立即调用alert(msg[0])代码。

如果您在console.log(msj)中看到控制台中的数据,这是因为在您展开对象之前,控制台不会评估对象。见this question。尝试将console.log更改为以下类似之一:

console.log(JSON.stringify(msj));
console.log(msj.length);
console.log(msj.join(","));

编辑:听起来您想要收集所有回复,然后在收到所有回复后再做一些事情。在success处理程序中,在将结果添加到msj后,请检查length以查看您是否已收到所有结果。收到所有回复后,msj.length应与a.length相同:

success: function (result) {   
    msj.push(result);
    if (msj.length == a.length) {
        // All responses have been received. Ready to use msj!
    }
}

答案 1 :(得分:0)

consolealert来电移至成功功能。

$.ajax({
    url:"js.php",
    cache:false,
    type:"POST",
    data:{concepto:Uno,descripcion:Dos,valor_total:Tres,valor_pagado:Cuatro,valor_f:valor_fact,saldo_pendiente:valor_recibo,numero_factura:id_fac,id_estudiante:id_student},
    success:function(result)
    {   
        msj.push(result);               
        console.log(msj);
        alert(msj[0]);        }
    });