执行以下代码时,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]);
答案 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)
将console
和alert
来电移至成功功能。
$.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]); }
});