PHP - ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

 
Vista:
sin imagen de perfil
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Jonathan (40 intervenciones) el 09/03/2020 15:08:50
Tengo el siguiente conjunto de datos, así como un panel de ventas

Captura

Tengo la siguiente función en jquery para enviar los datos via ajax

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function generar_pdf(){
        var time = 250;
        var action = 'fetch_data';
		var seleccion = [];
		$(".tabla_existencias tr").each(function(){
			var row = $(this).closest('tr');
			seleccion.push({
				codigo : row.find('td:eq(1)').text(),
				descripcion : row.find('td:eq(2)').text(),
				cantidad : row.find('td:eq(3)').text(),
				precio : row.find('td:eq(4)').text(),
				total : row.find('td:eq(5)').text(),
				tipo : row.find('td:eq(6)').text()
			});
		});
        var narticulos = document.getElementById("narticulos").value;
        var totbruto = document.getElementById("totbruto").value;
        var iva = document.getElementById("iva").value;
        var totneto = document.getElementById("totneto").value;
        $.ajax({
            url:"pdf.php",
            method: "POST",
            dataType: "json",
            data:{action:action,narticulos:narticulos,totbruto:totbruto,totneto:totneto,seleccion:seleccion},
            success:function(data){
 
			}
		});
    }

Con el boton pdf de la siguiente forma

1
<a href="pdf.php" target="_blank" id="pdf" class="btn btn-success">PDF</a>

y el archivo pdf.php de esa forma

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Existencias {
 
	public function prueba(){
		if (!(empty($_POST['narticulos'])) and !(empty($_POST['seleccion']))){
			$narticulos = $_POST['narticulos'];
			$totbruto = $_POST['totbruto'];
			$iva = $_POST['iva'];
			$totneto = $_POST['totneto'];
			$html = '	<table width="100%" style="vertical-align: bottom;">
							<tr><td width="100%" style="text-align:center"><img src="imagenes/logo-negro.png" width="300"/></td></tr>
							<tr><td width="100%" style="text-align:center"><p>General Korner #721 - Paradero 30 Gran Avenida - El Bosque</p><td><tr>
							<tr><td width="100%" style="text-align:center"><p>www.ecuservicechile.cl - contacto@ecuservicechile.cl</p><td><tr>
							<tr><td width="100%" style="text-align:center"><p>+56 9 5728 1246 | +56 9 3214 0292</p><td><tr>
						</table>
						<table>
							<tbody>
								<tr><td>N° ARTICULOS</td><td>'.$narticulos.'</td></tr>
								<tr><td>TOTAL BRUTO</td><td>$ '.number_format($totbruto, 0, ",", ".").'</td></tr>
								<tr><td>IVA 19%</td><td>$ '.number_format($iva, 0, ",", ".").'</td></tr>
								<tr><td>TOTAL NETO</td><td>$ '.number_format($totneto, 0, ",", ".").'</td></tr>
							</tbody>
						</table>';
			return $html;
		}else{
			return '<p>Sin Datos</p>';
		}
	}
}
 
$existencias = new Existencias;
echo $existencias->prueba();

Necesito pasar esos datos vía ajax al archivo pdf.php y abrir el archivo en una nueva pestaña, pero siempre me devuelve Sin datos y no se pasan los valores. Que podría estar haciendo mal ?, toda ayuda es bienvenida de antemano gracias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Julio (830 intervenciones) el 09/03/2020 15:38:22
Hola.

En primer lugar, si vas a abrirlo en una nueva pestaña, ¿por qué debes hacerlo por AJAX? Quizá se me escape algo, pero podrías enviarlos directamente a pdf.php en una ventana nueva y listo.

De hecho, creo que es justo lo que estás haciendo, pero "mal hecho" tanto por una parte como por la otra. Fíjate:

1
<a href="pdf.php" target="_blank" id="pdf" class="btn btn-success">PDF</a>

Estás creando un botón que te lleva a pdf.php en una ventana nueva, ¿pero como le envías los datos? No le estás enviando los datos de ninguna forma, por lo que es normal que no le lleguen los datos a pdf.php. Lo que pones ahí es un simple enlace que no envía datos. ¿Que lo vas a hacer con AJAX? Pues no veo en ningún sitio dónde estás llamando a la función generar_pdf, así que por ahí tampoco pasa en ningún momento.

Si lo quieres abrir en una nueva ventana, que me corrijan si estoy equivocado, pero no necesitas AJAX. Con AJAX recibirás los datos en la misma ventana, si no me equivoco, así que no te sirve esa función generar_pdf. Lo que tienes que hacer es crear un formulario con el target="_blank" para que se te abra el resultado en otra ventana, y así sí se le pasarán los datos vía $_POST.

P.D.: Por último, no sé ahora bien si new Existencias está permitido o debería ser new Existencias(), así que míralo esto también.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Jonathan (40 intervenciones) el 09/03/2020 16:02:40
Hola muchas gracias por tu respuesta, si mira aquí ejecuto la función

1
2
3
$('#pdf').click(function(){
    generar_pdf();
});
Los estoy enviando de ese modo, ya que no eh encontrado la forma de enviar los datos de una table mediante POST, no se si exista alguna forma de lograr eso.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Julio (830 intervenciones) el 09/03/2020 16:17:05
No sé hasta qué punto te funciona eso pensando que tienes un enlace <a> que ya hace su función cuando haces clic.

El formulario post podrías hacerlo oculto (campos hidden por ejemplo) y que sólo el botón fuera visible. Se me ocurre que podría funcionarte.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Jonathan (40 intervenciones) el 09/03/2020 16:22:45
Creo que ya me habías ayudado en un post anteriormente, mi problema es que no logro enviar la tabla mediante post, ya que no es un campo de tipo input.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Julio (830 intervenciones) el 09/03/2020 16:26:17
Por eso te comento. Al igual que creas la tabla con los datos, crea también un formulario post con los mismos datos. Pones los campos ocultos para que no se vean y que sólo se muestre el botón de PDF para enviar ese formulario oculto.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Jonathan (40 intervenciones) el 09/03/2020 16:33:09
Siendo sincero no se como hacer eso, necesito un poco de ayuda, es mi única traba por el momento y no puedo seguir adelante.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Julio (830 intervenciones) el 09/03/2020 16:36:20
No te compliques la cabeza, que es "sencillo". Quiero decir, haz un formulario normal:

1
2
3
<form action="pdf.php" method="post">
...
</form>

Pero que todos los input sean hidden y con el valor ya puesto:

1
2
<input type="hidden" name="descripcion" value="Aquí la descripción">
<input type="hidden" name="cantidad" value="Aquí la cantidad">

Y luego el botón de enviar del formulario que sea ese que has puesto de PDF. Tu formulario está pero no se verá, y el botón enviará el formulario con todos esos campos hidden que recuperarás en $_POST.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Jonathan (40 intervenciones) el 09/03/2020 16:44:40
Y no hay problema con la tabla que tenga varias filas hacía abajo ? con que se repita el name cantidad , descripción y todo eso?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Julio (830 intervenciones) el 09/03/2020 16:52:55
Cierto, no había pensado eso antes. Estaba pensando en un botón PDF para cada fila, fallo mío.

A ver, ahí lo mejor que puedes hacer es enviar por formulario de nuevo los parámetros para hacer el SELECT. En tu pdf.php deberías volver a hacer la llamada a la base de datos para obtener los datos allí y generar el PDF. Lo demás creo que es una locura, sobre todo porque serían muuuuuuuuchos datos si hay muuuuuuuuuuuuchas filas.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Jonathan (40 intervenciones) el 10/03/2020 20:28:42
Pense en lo siguiente, sirve, pero no del todo.
Cree una función que recorra todos los valores de la tabla y los guarde en un array y luego paso ese array como valor a un input hidden
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
function datos_repetidos2(){
    var seleccion = [];
    $(".tabla_existencias tr").each(function(){
        var row = $(this).closest('tr');
        seleccion.push({
            codigo : row.find('td:eq(1)').text(),
            descripcion : row.find('td:eq(2)').text(),
            cantidad : row.find('td:eq(3)').text(),
            precio : row.find('td:eq(4)').text(),
            total : row.find('td:eq(5)').text(),
            tipo : row.find('td:eq(6)').text()
        });
    });
    $('#oculto').val(seleccion);
}
Pero el input luego de ejecutar la función queda con el value de la siguiente forma
1
<input type="hidden" id="oculto" name="oculto" value="[object Object]">
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Julio
Val: 2.007
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Julio (830 intervenciones) el 10/03/2020 21:13:52
Hola.

Debes utilizar un input hidden para cada dato. No le puedes pasar un array o un objeto entero.

-----------------------------
Aprende la programación desde una perspectiva básica y simplista en Programación Básica
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 79
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

ENVIAR DATOS POR AJAX Y ABRIR ARCHIVO EN NUESTA PESTAÑA

Publicado por Jonathan (40 intervenciones) el 11/03/2020 16:42:54
Podría servir lo que sale en ese link ?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar