Soporte » WordPress Avanzado » Enviar Datos a traves de ajax y Procesarlo en otra pagina php

  • Necesito hacer una consulta para recibir los valores en otra pagina y procesarlos y luego mostrarlo en un DIV sin refrescar la pagina, este código funciona en PHP y AJAX normal, pero cuando intento implementarlo en WORDPRESS no funciona. agradeciendo cualquier tipo de ayuda.

    <script>
    function objetoajax(){
      var xmlhttp=false;
      try{
        xmlhttp = new ActiveXObject("Msxm12.XMLHTTP");
      } catch(e){
          try{
            xmlhttp= new ActiveXObject("Microsoft.XMLHTTP");
          } catch(E){
            xmlhttp=false;
          }
      }
      if (!xmlhttp && typeof XMLHttpRequest!='undefined'){
        xmlhttp= new XMLHttpRequest();
      }
      return xmlhttp;
    }
    function enviar(){
      jdatefrom = document.getElementById('datefrom').value;
      jdateto = document.getElementById('dateto').value;
      jroomtype = document.getElementById('roomtype').value;
      ajax = objetoajax();
      ajax.open("POST","consulta.php", true);
      ajax.onreadystatechange=function(){
        if (ajax.readyState==4 && ajax.status==200) {
          document.getElementById("txtHint").innerHTML=ajax.responseText;
        }
      }
      ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
      ajax.send("sdatefrom="+jdatefrom+"&sdateto="+jdateto+"&sroomtype="+jroomtype+"");
    }
    
    </script>
    <?php
    
    	$rdatefrom= $_POST['sdatefrom'];
    	$rdateto= $_POST['sdateto'];
    	$rroomtype= $_POST['sroomtype'];
    
    	$echo "string $rdatefrom";
    	$echo "string $rdateto";
    	
    
    require_once( get_template_directory().'/inc/admin/techno/model/conexion.php');
    //consulta todos los empleados
    
    /*$sql="SELECT * FROM empleados WHERE idempleado='".$q."'";*/
    $sql="SELECT tl_room.name, tl_availability.price_per_person, tl_availability.price_extra_pack, tl_availability.price_child 
    FROM tl_availability INNER JOIN tl_room ON tl_availability.idroom= tl_room.idroom
    WHERE '".$rdatefrom."' and '".$rdateto."' BETWEEN tl_availability.date_from AND tl_availability.date_to AND tl_room.name='".$rroomtype."'";
    
    $resuly=$conexion->query($sql);
    
    //muestra los datos consultados
    
    while($row = mysqli_fetch_array($resuly)){
    ?>
    		<label>Room Type:<?php echo $row['name'];?></label>
    		<label>Price per person:<?php echo $row['price_per_person'];?></label>
    		<label>Price extra pack:<?php echo $row['price_extra_pack'];?></label>
    		<label>Price child:<?php echo $row['price_child'];?></label>
    <?php
    break;
    }
    ?>
    
Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • Buenas,

    El ajax en wp funciona de forma distinta a como se utiliza en una web normal.
    Mi codigo js donde tengo el ajax:

    var formDatos = new FormData();
                    formDatos.append( 'email', jQuery('input[name="email"]').val() );
                    formDatos.append( 'contrasena', jQuery('input[name="contrasena"]').val() );
    
                    jQuery.ajax({
                        url: 'mi-web/wp-admin/admin-ajax.php?action=formEntrarUsuario',
                        type: 'POST',
                        contentType: false,
                        data: formDatos,
                        processData: false,
                        cache: false,
                        dataType: 'text', // what to expect back from the PHP script, if anything
                        success: function(datos) {
                            if ( datos == 0 ) {
                                jQuery('.msg').html('El email o contrase&ntilde;a no existen');
                                jQuery('input[type="password"], input[type="text"]').addClass('bad');
                                jQuery('input[type="text"]').focus();
                            } else {
                                window.location.replace(datos);
                            }
                        }
                    });

    Y luego tienes que poner la funcion a la que llamas, ya puedas ponerla en el functions o en un archivo aparte antes declarado.

    function formEntrarUsuario() {
                global $wpdb;
    
                $email      = $_POST['email'];
                $contrasena = $_POST['contrasena'];
                $user       = $wpdb->get_results('SELECT * FROM usuarios WHERE email ="' . $email . '"');
    
                if ( $wpdb->num_rows ) {
                    if ( password_verify( $contrasena, $user[0]->contrasena ) ) {
                        session_start();
                        $_SESSION['user'] = $user[0]->id;
                        echo get_site_url() . '/newsletters/';
                    } else {
                        echo '0';
                    }
                } else {
                    echo '0';
                }
    
                die();
            }
            add_action( 'wp_ajax_formEntrarUsuario', 'formEntrarUsuario' );
            add_action( 'wp_ajax_nopriv_formEntrarUsuario', 'formEntrarUsuario' );

    La url del ajax siempre tiene que poner lo mismo hasta el action que es donde pones tu funcion.
    La funcion que llamas siempre tiene que tener las dos acciones, una para dentro del admin y otra para lo publico.

    Si no es así, que alguien me corrija, pero a mi me funciona esto perfectamente.

    Saludos

    • Esta respuesta fue modificada hace 5 años, 8 meses por inigonz.
    Iniciador del debate alvinluperon

    (@alvinluperon)

    Buenos gracias, por la aclaración por lo menos ahora tengo una idea de como hacerlo gracias a ti, por que ya no encontraba ni como hacerlo.

    Na, aquí estamos para ayudarnos entre todos, a mi este tema también me costo sacarlo

    saludos

Viendo 3 respuestas - de la 1 a la 3 (de un total de 3)
  • El debate ‘Enviar Datos a traves de ajax y Procesarlo en otra pagina php’ está cerrado a nuevas respuestas.