Ir al contenido



Foto

Pasar variable por método Ajax a php


  • Por favor identifícate para responder
7 respuestas en este tema

#1 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 111 mensajes

Escrito 09 agosto 2017 - 05:28

Buenas noches queridos compañeros!

 

Estoy terminando un pequeño sistema donde lleno un DataTable mediante una consulta que levanto de un archivo Listar.php (mas abajo pego el código)  el cual es llamado mediante Ajax (el código que esta debajo) mediante método POST. Hasta aquí muestra correctamente la consulta, mi problema es que necesito enviarle a Listar.php una variable para poder filtrar la consulta.

 

Alguno sabe como podría  hacer para pasarle esa variable.

 

variable que necesito pasar: $filtro = "(1,2,3)";


javascript
  1. var Listar = function(){
  2. $("#cuadro2").slideUp("slow");
  3. $("#cuadro1").slideDown("slow");
  4. var table = $("#grilla").dataTable({
  5. "ajax":{
  6. "method":"POST",
  7. "url":"listar.php"
  8. },
  9. "columns":[
  10. {"data":"NOMBRE"},
  11. {"data":"CLAVE"},
  12. {"data":"PATOLOGIAS"},
  13. {"data":"NOTAS"},
  14. {"data":"TELEFONO"},
  15. {"data":"ENFERMEDAD"},
  16. {"defaultContent":"<button type='button' class='editar btn btn-primary'><i class='fa fa-pencil-square-o'></i></button> <button type='button' class='eliminar btn btn-danger' data-toggle='modal' data-target='#modalEliminar' ><i class='fa fa-trash-o'></i></button>"}
  17. ]

Listar.php


php
  1. <?php
  2. include ("conexion.php");
  3.  
  4. $query = "select p.nombre, p.clave, pe.nombre as Patologias, po.Notas,p.telefono, po.enfermedad from pacientes_odonto po
  5. left join pacientes p on po.paciente = p.clave
  6. left join pacientes_enfermedades pe on po.enfermedad = pe.id order by nombre asc;";
  7.  
  8. $resultado = ibase_query($conexion, $query);
  9.  
  10. if (!$resultado){
  11. echo "No existen registros en la base de datos.";
  12. }else {
  13.  
  14. while ($data = ibase_fetch_assoc($resultado)) {
  15. $arreglo["data"][] = array_map("utf8_encode", $data);
  16. }
  17. echo json_encode($arreglo);
  18. }
  19. ibase_free_result($resultado);
  20. ibase_close($conexion);
  21.  
  22. ?>


  • 0

#2 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.956 mensajes
  • LocationArgentina

Escrito 09 agosto 2017 - 08:20

 

Buenas noches queridos compañeros!

 

Estoy terminando un pequeño sistema donde lleno un DataTable mediante una consulta que levanto de un archivo Listar.php (mas abajo pego el código)  el cual es llamado mediante Ajax (el código que esta debajo) mediante método POST. Hasta aquí muestra correctamente la consulta, mi problema es que necesito enviarle a Listar.php una variable para poder filtrar la consulta.

 

Alguno sabe como podría  hacer para pasarle esa variable.

 

variable que necesito pasar: $filtro = "(1,2,3)";


javascript
  1. var Listar = function(){
  2. $("#cuadro2").slideUp("slow");
  3. $("#cuadro1").slideDown("slow");
  4. var table = $("#grilla").dataTable({
  5. "ajax":{
  6. "method":"POST",
  7. "url":"listar.php"
  8. },
  9. "columns":[
  10. {"data":"NOMBRE"},
  11. {"data":"CLAVE"},
  12. {"data":"PATOLOGIAS"},
  13. {"data":"NOTAS"},
  14. {"data":"TELEFONO"},
  15. {"data":"ENFERMEDAD"},
  16. {"defaultContent":"<button type='button' class='editar btn btn-primary'><i class='fa fa-pencil-square-o'></i></button> <button type='button' class='eliminar btn btn-danger' data-toggle='modal' data-target='#modalEliminar' ><i class='fa fa-trash-o'></i></button>"}
  17. ]

Listar.php


php
  1. <?php
  2. include ("conexion.php");
  3.  
  4. $query = "select p.nombre, p.clave, pe.nombre as Patologias, po.Notas,p.telefono, po.enfermedad from pacientes_odonto po
  5. left join pacientes p on po.paciente = p.clave
  6. left join pacientes_enfermedades pe on po.enfermedad = pe.id order by nombre asc;";
  7.  
  8. $resultado = ibase_query($conexion, $query);
  9.  
  10. if (!$resultado){
  11. echo "No existen registros en la base de datos.";
  12. }else {
  13.  
  14. while ($data = ibase_fetch_assoc($resultado)) {
  15. $arreglo["data"][] = array_map("utf8_encode", $data);
  16. }
  17. echo json_encode($arreglo);
  18. }
  19. ibase_free_result($resultado);
  20. ibase_close($conexion);
  21.  
  22. ?>

 

No lo he probado, pero me parece que una opción sería esto:


php
  1. var Listar = function(){
  2. $("#cuadro2").slideUp("slow");
  3. $("#cuadro1").slideDown("slow");
  4. var url = "listar.php?filtro=(1,2,3)";
  5. var table = $("#grilla").dataTable({
  6. "ajax":{
  7. "method":"POST",
  8. "url": url,
  9. },
  10. "columns":[
  11. {"data":"NOMBRE"},
  12. {"data":"CLAVE"},
  13. {"data":"PATOLOGIAS"},
  14. {"data":"NOTAS"},
  15. {"data":"TELEFONO"},
  16. {"data":"ENFERMEDAD"},
  17. {"defaultContent":"<button type='button' class='editar btn btn-primary'><i class='fa fa-pencil-square-o'></i></button> <button type='button' class='eliminar btn btn-danger' data-toggle='modal' data-target='#modalEliminar' ><i class='fa fa-trash-o'></i></button>"}
  18. ]

Es decir, armar el url del script con el filtro y pasarselo. Hay otra más, un poquito más "elaborada":

Si el filtro proviene de una variable o parámetro que pueda ser introducido por el usuario es viable esta forma:


php
  1. var strvar = 'proc=ajax&term=' + $('#b_buscar_artcod').val();
  2. strvar += '&recurso=f_searchcod&tipo_art_id=' + tipo_art;
  3. $.ajax({
  4. type: 'GET',
  5. url: 'admin/comprobante_buscar_articulo_codigo.php',
  6. data: strvar,

Eso es un pequeño ejemplo de algo en lo que trabajo.

Puedes ver que se arma un string con los parámetros a enviar, y luego se lo pasamos a data. La url queda sin modificar. Puede ser por la via POST o GET. En mi ejemplo, se ve que se añade un parámetro más que espera el script php llamado proc. Esto nos permite saber cuando se llama vía ajax y cuando no y dependiendo de cada caso actuar en consecuencia.

 

Creo que es lo suficiente para que te hagas una idea.

 

Saludos,


  • 0

#3 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 111 mensajes

Escrito 09 agosto 2017 - 09:36

Gracias por responder.

 

Puse como me dijiste y del lado de Listar.php intente recibir la variable ($llego = $_POST["filtro"]; ) pero me arroja Notice: Undefined index:


php
  1. <?php
  2.  
  3. $llego = $_POST["filtro"];
  4.  
  5. $query = "select p.nombre, p.clave, pe.nombre as Patologias, po.Notas,p.telefono, po.enfermedad from pacientes_odonto po
  6. left join pacientes p on po.paciente = p.clave
  7. left join pacientes_enfermedades pe on po.enfermedad = pe.id order by nombre asc;";
  8.  
  9. include ("conexion.php");
  10.  
  11. $resultado = ibase_query($conexion, $query);
  12.  
  13. if (!$resultado){
  14. echo "No existen registros en la base de datos.";
  15. }else {
  16.  
  17. while ($data = ibase_fetch_assoc($resultado)) {
  18. $arreglo["data"][] = array_map("utf8_encode", $data);
  19. }
  20. echo json_encode($arreglo);
  21. }
  22. ibase_free_result($resultado);
  23. ibase_close($conexion);
  24.  
  25. ?>


  • 0

#4 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.956 mensajes
  • LocationArgentina

Escrito 10 agosto 2017 - 05:35

Tendría que ver bien tu código. Pero asi de vista rápida lo que veo es que en ningun lado de ese script listar.php haces uso de lo que viene vía POST.

Prueba poniendo un reporting ALL para ver la seguidilla de errores. O un var_dump sobre las variables para ver que contienen...

 

Saludos,


  • 0

#5 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.220 mensajes
  • LocationRepública Dominicana

Escrito 10 agosto 2017 - 10:22

Siendo Ajax no tiene un método data donde se pasa las variables?, algo así:


javascript
  1. var Listar = function(){
  2. $("#cuadro2").slideUp("slow");
  3. $("#cuadro1").slideDown("slow");
  4. var url = "listar.php?filtro=(1,2,3)";
  5. var table = $("#grilla").dataTable({
  6. "ajax":{
  7. "method":"POST",
  8. "data":{filtro: "valor"}, <-- esto aquí
  9. "url": url,
  10. },
  11. "columns":[
  12. {"data":"NOMBRE"},
  13. {"data":"CLAVE"},
  14. {"data":"PATOLOGIAS"},
  15. {"data":"NOTAS"},
  16. {"data":"TELEFONO"},
  17. {"data":"ENFERMEDAD"},
  18. {"defaultContent":"<button type='button' class='editar btn btn-primary'><i class='fa fa-pencil-square-o'></i></button> <button type='button' class='eliminar btn btn-danger' data-toggle='modal' data-target='#modalEliminar' ><i class='fa fa-trash-o'></i></button>"}
  19. ]

Además en Listar.php debe hacer un $_GET o $_REQUEST para obtener el valor de filtro.

 

Saludos.


  • 0

#6 el-mono

el-mono

    Advanced Member

  • Miembros
  • PipPipPip
  • 111 mensajes

Escrito 10 agosto 2017 - 12:08

Gracias gente por su tiempo, al final funciono pasando por Url y del otro lado tomándolo con $_GET

 

Saludos


  • 0

#7 Delphius

Delphius

    Advanced Member

  • Administrador
  • 5.956 mensajes
  • LocationArgentina

Escrito 10 agosto 2017 - 12:50

Gracias gente por su tiempo, al final funciono pasando por Url y del otro lado tomándolo con $_GET

 

Saludos

 

¿Podrías exponer a modo de ejemplo como fue la solución que encontraste? Puede ser útil para otras personas con un problema idéntico o similar.

 

Siendo Ajax no tiene un método data donde se pasa las variables?, algo así:


javascript
  1. var Listar = function(){
  2. $("#cuadro2").slideUp("slow");
  3. $("#cuadro1").slideDown("slow");
  4. var url = "listar.php?filtro=(1,2,3)";
  5. var table = $("#grilla").dataTable({
  6. "ajax":{
  7. "method":"POST",
  8. "data":{filtro: "valor"}, <-- esto aquí
  9. "url": url,
  10. },
  11. "columns":[
  12. {"data":"NOMBRE"},
  13. {"data":"CLAVE"},
  14. {"data":"PATOLOGIAS"},
  15. {"data":"NOTAS"},
  16. {"data":"TELEFONO"},
  17. {"data":"ENFERMEDAD"},
  18. {"defaultContent":"<button type='button' class='editar btn btn-primary'><i class='fa fa-pencil-square-o'></i></button> <button type='button' class='eliminar btn btn-danger' data-toggle='modal' data-target='#modalEliminar' ><i class='fa fa-trash-o'></i></button>"}
  19. ]

Además en Listar.php debe hacer un $_GET o $_REQUEST para obtener el valor de filtro.

 

Saludos.

 

Pues, es casi lo mismo que he propuesto yo en mi 2da muestra de código. Pasarle en data los parámetros que espera la url.

Ahora, si no es mucha molestia, ¿que es $_REQUEST? ¿Y que diferencia hay respecto a $_GET y $_POST?

A pesar de que estoy adentrándome en PHP, aún no tengo bien asimilado las diferencias entre GET y POST.

 

Saludos,


  • 0

#8 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.220 mensajes
  • LocationRepública Dominicana

Escrito 10 agosto 2017 - 01:01

$_GET se utiliza cuando las variables son pasadas mediante $_POST, y $_REQUEST lo mismo sólo que recoge los datos desde la misma URL sin necesidad de post o get.

 

Saludos.


  • 0