entre Desarrolladores

Recibe ayuda de expertos

Registrate y pregunta

Es gratis y fácil

Recibe respuestas

Respuestas, votos y comentarios

Vota y selecciona respuestas

Recibe puntos, vota y da la solución

Pregunta

1voto

LLamada a script php desde Jquery

Buenos dias estoy haciendo un carrito de compras, en el cual tengo que realizar el pedido via email, tengo el siguiente codigo en jQuery

<script type="text/javascript">

  $(function () {
    var goToCartIcon = function($addTocartBtn){
    var $cartIcon = $(".my-cart-icon");
    var $image = $('<img width="30px" height="30px" src="' + $addTocartBtn.data("image") + '">').css({"position": "fixed", "z-index": "999"});
    $addTocartBtn.prepend($image);
    var position = $cartIcon.position();
    $image.animate({
      top: position.top,
      right: position.right
    }, 500 , "linear", function() {
      $image.remove();
    });
  }

  $('.my-cart-btn').myCart({
    classCartIcon: 'my-cart-icon',
    classCartBadge: 'my-cart-badge',
    affixCartIcon: true,
    checkoutCart: function(products, totalPrice, totalQuantity) {
        var checkoutString = "Total Price: " + totalPrice + "\nTotal Quantity: " + totalQuantity;
        checkoutString += "\n\n Codigo \t Producto \t Precio \t Cantidad";
        $.each(products, function(){
          checkoutString += ("\n " + this.id + " \t " + this.name +  + " \t " + this.price + " \t " + this.quantity);
        });
        alert(checkoutString)
        var data={ producto: products, 
                   total: totalPrice,
                   cantidad: totalQuantity};

        $.ajax({
    data : data,
    url: "mail.php",
    type: 'POST',
    success: function() {
        $('#result').html(data);
         //window.location="mail.php";
    },
    error: function() {
        alert( "Ha ocurrido un error" );
    }
    });
      },
    clickOnAddToCart: function($addTocart){
      goToCartIcon($addTocart);
    },
    getDiscountPrice: function(products) {
      var total = 0;
      $.each(products, function(){
        total = this.quantity * this.price;
      });
      return total;
    }
  });

});
  </script>

MAIL.PHP

<?php
    <?php
    session_start();
    ini_set("memory_limit", "2048M");
    if(isset($_POST['producto']))
    {$headers = "From: Macrofer Paseo Ferretero S.A. < [email protected] >\r\n";
    //Enviamos el mensaje a tu_dirección_email 
    $producto=$_POST['producto'];
    $destinatario=$_SESSION['email'];
    $copia1="[email protected]";
    $total=$_POST['total'];
    $cantotal=$_POST['cantidad'];
    $fecha=date("d/m/y");
    $hora=date("H:i:s");
    $nombre=$_SESSION['nombre'];
    //Estoy recibiendo el formulario, compongo el cuerpo
    $cuerpo = "Nuevo pedido Mayorista";
    $count = count($producto);
    $i=0;
    var_dump($_POST['producto']);
    while($i<$count){
    $cuerpo .= "<table border='1'>
<tr><td colspan='2'> Pedido de $nombre</td></tr>
<tr><td> FECHA </td><td> $fecha </td></tr>
<tr><td> HORA </td><td> $hora </td></tr>
<tr><td> ID </td><td> $producto[$i]['id']; </td></tr>
<tr><td> Producto </td><td> $producto[$i]['name']; </td></tr>
<tr><td> Cantidad </td><td> $producto[$i]['quantity'] </td></tr>
<tr><td> Total </td><td> $total </td></tr>
    </table>,";}
    //mando el correo...
    $book=mail($destinatario,$cuerpo,$headers);
    if($book){
    echo "Mensaje enviado";
}else{
    echo "Mensaje no enviado";
}
    }
    else {'sin data';}
    ?>

en el cual realiza las funciones del carro correctamente, luego en la parte del ajax envio la informacion a un archivo llamado mail.php en el cual la idea es que se envie por email los datos del pedido, cuando doy click en el botón de finalizar compra para enviar el pedido, este retorna el cartel funciona y estos datos son los datos que me muestra via consola luego de mostrar el cartel de funciona.

productos[0][id]:01061
productos[0][name]:CLAVOS PUNTA PARIS A GRANEL xKG   -   1.1/2
productos[0][summary]:
productos[0][price]:35
productos[0][quantity]:1
productos[0][image]:img/nodis.jpg
total:35
cantidad:1

El envio de datos por ajax parece funcionar correctamente el problema es que no se envia el mail, no muestra ningun mensaje creado en php ni muestra el var_dump de productos que hago. Si alguien tiene alguna idea!

Leonardo-Tadei comentado Mar 25

@matti, creeme, de veras, el problema NO es que no se envía el e-mail...lo que no te anda es la llamada al script PHP.

Confunde mucho que sigas apuntando en la dirección equivocada :-(

matti comentado Mar 25

Si no funciona el script porque es entonces? Yo no veo el error

Leonardo-Tadei comentado Mar 26

pasanos la salida de un console.log(data) antes de hacer la llamada AJAX, para ver qué es lo que estás enviando...

matti comentado Mar 27

Objectcantidad: 5producto: Array[1]0: Objectlength: 1proto: Array[0]total: 185proto: Object

y luego me aparece en consola despues de aparece el cartel de "Funciona" lo siguiente.

Imagen de lo que envia

Si queres @Leonardo-Tadei dame un mail y te envio un acceso a la web asi vez de primera el error

2 Respuestas

0voto

matti Puntos520

Solucionado !

Archivo ajax a enviar:

$.ajax({
            type: 'POST',
            url: "mail.php",
            data : { producto: products, 
                   total: totalPrice,
                   cantidad: totalQuantity},
            success: function(data) {
                alert( "Funciona" );
                $('#result').html(data);
                alert(data);
            },
            error: function() {
                alert( "Ha ocurrido un error" );
            }
            });

Archivo php con email que recibe:

<?php
    session_start();

    $headers  ='Empresa.' . "\r\n";
    $headers .='MIME-Version: 1.0' . "\r\n";
    $headers .='Content-type: text/html; charset=iso-8859-1' . "\r\n";
    //Enviamos el mensaje a tu_dirección_email 
    $producto=$_POST['producto'];
    $destinatario=$_SESSION['email'];
    $copia1="[email protected]";
    $total=$_POST['total'];
    $cantotal=$_POST['cantidad'];
    $fecha=date("d/m/y");
    $hora=date("H:i:s");
    $nombre=$_SESSION['nombre'];
    //Estoy recibiendo el formulario, compongo el cuerpo
    $counter = count($producto);
    $cont=0;
$cuerpo = "Pedido de <strong>$nombre</strong> el dia <strong>$fecha</strong> a las <strong>$hora</strong>
  <html><body><table border='1'><thead><tr>
        <th>ID</th>
        <th>Producto</th>
        <th>Marca</th>
        <th>Cantidad</th>
        <th>Picking</th>

</tr>
</thead>";

     for ($cont = 0; $cont < $counter; $cont++){
    $cuerpo .="<tbody>
<tr>
<td> {$producto[$cont]['id']} </td>
<td> {$producto[$cont]['name']} </td>
<td> {$producto[$cont]['summary']} </td>
<td> {$producto[$cont]['quantity']} </td>
<td                  </td>
     </tr>
     ";}
     $cuerpo .="
     <tr ><td colspan='5' align='center'>Total de renglones - $cont </td></tr>
         <tr ><td colspan='5' align='center'>Total de renglones armados -  </td></tr>
     </tbody>
     </table> </body></html>";

     $cuerpoo = "Hola <strong>$nombre</strong> tu pedido fue realizado el día <strong>$fecha</strong> a las <strong>$hora</strong>Hs.
  <html><body><table border='1'><thead><tr>
        <th>ID</th>
        <th>Producto</th>
        <th>Marca</th>
        <th>Cantidad</th>
</tr>
</thead>";

     for ($cont = 0; $cont < $counter; $cont++){
    $cuerpoo .="<tbody>

<tr>
<td> {$producto[$cont]['id']} </td>
<td> {$producto[$cont]['name']} </td>
<td> {$producto[$cont]['summary']} </td>
<td> {$producto[$cont]['quantity']} </td>
     </tr>
     ";}
     $cuerpoo .="
     </tbody>
     </table> </body></html>";
     echo $cont;
     echo $destinatario;    

    $book=mail($destinatario,"Este es tu pedido a Empresa.",utf8_decode($cuerpoo),$headers);
    $book1=mail('--',"Nuevo Pedido Mayorista de $nombre",utf8_decode($cuerpo),$headers);
    $book2=mail('--',"Nuevo Pedido Mayorista de $nombre",$cuerpo,$headers);
    $book3=mail('--',"Nuevo Pedido Mayorista de $nombre",utf8_decode($cuerpo),$headers);

    if($book)
            {
    echo "Tu mensaje fue enviado correctamente, para consultas y/o modificaciones comunicarse al -- o a --";
            }
    else
            {
    echo "Mensaje no enviado";
            }   
    ?>

Gracias por las indicaciones!

Peter comentado Mar 29

Gracias por compartir la solución!

matti comentado Mar 29

De Nada! Así nos ayudamos entre todos!

Leonardo-Tadei comentado Mar 29

y cómo te quedó data y products antes de hacer el envío? Podrías poner una salida de un console.log() para ver cómo te quedó armado?

matti comentado Mar 29

Si mañana te lo pongo porque no estoy en el trabajo ahora mismo! Voy recién mañana

1voto

Leonardo-Tadei Puntos217380

Hola @matti,

el problema que veo en la transmisión de datos es que en JS estás armando mal la cadena a enviar, con lo que el script PHP no está recibiendo en realidad un valor $_POST['producto'] para entrar al IF.

Si te hace falta enviar un vector en la petición, tenés que tener todo codificado JSON con formato de petición web form-data, y no como tenés ahora, un Object que tiene adentro un array.

En este artículo hay un ejemplo decente de cómo se codifica esto, y cómo se decodifica luego al recibirlo en el escript PHP. En esta pregunta de SO también se trata el tema.

En resumen, la invocación al PHP no parece estarle enviando ningún valor POST, o es directamente descartada por el formato erróneo.

Saludos cordiales!

PD: fijate como seguimos un poco en la obscuridad, porque todo parte de la llamada a checkoutCart(), pero no está el código de la llamada, que es don dónde viene codificado "products"... es decir, no tenemos como ver el contenido de ese parámetro y nos podemos dar solo una idea a partir del console.log(data) que te pedí, y que si lo leés en tu respuesta, quedó incompleto y mal separado. :-(

matti comentado Mar 29

Gracias leonardo ya lo pude solucionar un saludo !

Por favor, accede o regístrate para responder a esta pregunta.

¿Conoces alguien que puede responder?
¡Comparte esta pregunta!


Otras Preguntas y Respuestas


Actividad Reciente

...

Bienvenido a entre Desarrolladores, donde puedes realizar preguntas y recibir respuestas de otros miembros de la comunidad.

Conecta