Hola, estoy intentando pasar de una pagina a otra sin recargar un array usando jQuery y ajax, tiene un formulario dinámico para añadir lineas dinámicamente al formulario, pero cuando pasa el array a la pagina que guarda en mysql se reinicia en cada linea con lo que solo guardo un resultado.
¿que puedo estar haciendo mal?
esto seria el código html del formulario
Código HTML:
<form action="guardar.php" id="Agarticulos" method="post" >
<input type="hidden" name="cosa" id="cosa" value="presualqui">
<input type="hidden" name="loque" value="articulos">
<input type="text" name="nuevo" id="nuevoArticulo" value="si">
<table id="table-data">
<thead>
<tr class="cabecera_tabla">
<th class="uni">Uni</th>
<th class="concepto">Concepto</th>
<th class="precio">Precio</th>
<th class="coef">Coef.</th>
<th class="desc">%Desc.</th>
<th class="subtotal">Subtotal</th>
<th class="opciones">Opciones</th>
</tr>
</thead>
<tbody id="LineasDocumento" class="ordenable Lineasdoc">
<tr>
<td class="uni"><input type="text" name="cantidad" id="cantidad" class="obligatorio numeros" onkeypress="return Comprobarnum(event)" placeholder="Uni"></td>
<td class="concepto"><input type="text" name="nombre" id="Articulo" autocomplete="off" class="obligatorio" placeholder="Concepto"></td>
<td class="precio"><input type="text" name="precio" id="precio" class="obligatorio numeros" onkeypress="return Comprobarnum(event)" placeholder="precio"></td>
<td class="coef"><input type="text" name="coeficiente" id="coeficiente" class="obligatorio numeros" onkeypress="return Comprobarnum(event)" placeholder="Coef."></td>
<td class="desc"><input type="text" name="descu" id="descu" class="obligatorio numeros" onkeypress="return Comprobarnum(event)" placeholder="Desc."></td>
<td class="subtotal"><input type="text" name="total" disabled id="total" placeholder="Subtotal"></td>
<td class="opciones"><input id="agregarln" onclick="AddLinea(this.form);" type="button" class="botonverde" value="agregar" /></td>
</tr>
</tbody>
</table>
<input type="submit" value="enviar">
</form>
esto seria el javascript de las lineas dinámicas y del guardado
Código:
var LineaNum = 0;
function AddLinea(frm) {
var error = 0;
if ($("#cantidad").val().length < 1) { $().toastmessage('showToast', { text : 'Error<br /> El articulo no puede estar vacio', sticky : false, type : 'error' }); var error = 1; }
if ($("#Articulo").val().length < 1) { $().toastmessage('showToast', { text : 'Error<br /> El articulo no puede estar vacio', sticky : false, type : 'error' }); var error = 1; }
if ($("#precio").val().length < 1) { $().toastmessage('showToast', { text : 'Error<br /> El precio no puede estar vacio', sticky : false, type : 'error' }); var error = 1; }
if ($("#coeficiente").val().length < 1) { $().toastmessage('showToast', { text : 'Error<br /> El coeficiente no puede estar vacio', sticky : false, type : 'error' }); var error = 1; }
if ($("#descu").val().length < 1) { $().toastmessage('showToast', { text : 'Error<br /> El descuento no puede estar vacio', sticky : false, type : 'error' }); var error = 1; }
if(error != 1) {
LineaNum ++;
var Linea = '<tr id="LineaNum'+LineaNum+'" class="Lineasdoc"><td class="uni"><input type="hidden" class="posicion" name="posicion['+LineaNum+'][posicion]"><input type="hidden" name="cantidad['+LineaNum+']" value="'+frm.cantidad.value+'">'+frm.cantidad.value+'</td><td class="concepto"><input type="hidden" name="nombre['+LineaNum+']" value="'+frm.nombre.value+'">'+frm.nombre.value+'</td><td class="precio"><input type="hidden" name="precio['+LineaNum+']" value="'+frm.precio.value+'">'+frm.precio.value+'</td><td class="coef"><input type="hidden" name="coeficiente['+LineaNum+']" value="'+frm.coeficiente.value+'">'+frm.coeficiente.value+'</td><td class="desc"><input type="hidden" name="descu['+LineaNum+']" value="'+frm.descu.value+'">'+frm.descu.value+'</td><td class="subtotal"><input type="hidden" name="total['+LineaNum+']" value="'+frm.total.value+'">'+frm.total.value+'</td><td class="opciones"><button class="botonrojo" onclick="EliminarLinea('+LineaNum+' ,'+frm.total.value+');">Borrar</button></td></tr>';
jQuery('#LineasDocumento').append(Linea);
frm.nombre.value = '';
frm.cantidad.value = '';
frm.precio.value = '';
frm.coeficiente.value = $("#coeficienteG").val();
frm.descu.value = $("#descuentoG").val();;
frm.total.value = '';
$("#cantidad").focus();
ordenar()
Guardar_articulos()
return false;
}
}
function EliminarLinea(rnum,descontar) {
jQuery('#LineaNum'+rnum).remove();
var subtotal = $('input[name=Subtotal]').val();
if (!isNaN(descontar)){ subtotal -= parseFloat(descontar);
}else{
return true;
}
$('input[name=Subtotal]').val(subtotal);
}
function Guardar_articulos() {
var Darticulos = $("#Agarticulos").serialize();
$.ajax({
url: "guardar.php",
data: Darticulos,
type: 'post',
beforeSend:function(data) { alert(Darticulos) },
success: function(data) { $().toastmessage('showToast', { text : 'Datos almacenados correctamente'+ data, sticky : true, type : 'success' }); },
error: function(data){ $().toastmessage('showToast', { text : 'Error al guardar '+ data, sticky : true, type : 'error' }); }
});
};
y el resultado que me da es este:
Array ( [cosa] => presualqui [loque] => articulos [nuevo] => no [cantidad] => Array ( [1] => 1 [2] => 1 ) [nombre] => Array ( [1] => Disco Duro SSD 128Gb [2] => Toalla Intercalada Blanca 2500u ) [precio] => Array ( [1] => 180 [2] => 120 ) [coeficiente] => Array ( [1] => 1 [2] => 1 ) [descu] => Array ( [1] => 0 [2] => 0 ) [posicion] => Array ( [1] => Array ( [posicion] => 2 ) [2] => Array ( [posicion] => 1 ) ) [total] => Array ( [1] => 180 [2] => 120 ) )
como veis crea mil arrays en vez de uno solo ¿en que me estoy equivocando?
también quisiera quitar el primer resultado que esta vacío ( se supone que es donde meto los datos para que luego se vayan al formulario dinámico y claro siempre esta vacío )
muchas gracias a todos de antemano.