Получать признак пуговицы с jQuery и Аякс?

$(document).ready(function() {

  $(".eliminar").click(function(e) {

    e.preventDefault();
    var id = $(this).attr('data-id');

    //alert(id);
    $(this).closest('.holder-cesta').remove();

    //Esta parte no me funciona.
    $.post('./php/carro_compra/eliminar.php', {
      Id: id
    }, function(a) {
      if (a == '0') {
        location.href = "./cesta";
      }
    });


  });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<div class="holder-cesta">
  <h4>Product 1</h4>
  <button class="eliminar" data-id="1">Delete</button>
</div>

<div class="holder-cesta">
  <h4>Product 3</h4>
  <button class="eliminar" data-id="3">Delete</button>
</div>

<div class="holder-cesta">
  <h4>Product 2</h4>
  <button class="eliminar" data-id="2">Delete</button>
</div>

Я создаю boton удаления продуктов корзины. У каждого добавленного продукта будет один boton удаления.

Результаты салазок покупки я охраняю ее на заседании, названный $_SESSION['carrito'];

Сюда идет кодекс, где я называю продукты и Вашу пуговицу удаления:

<?php
    //Array carrito de compras.
    $data = $_SESSION['carrito'];
    $total = 0;                                     

    for ($i=0; $i<count($data); $i++) {
?>

      <div class="holder-cesta">
         <h4><?php echo $data[$i]['Titulo']; ?></h4>    
         <button class="eliminar" data-id="<?php echo $data[$i]['Id']; ?>">Eliminar</button>    
      </div>
<?php
     }
?>

data-id я получаю id продукта.

Давайте видеть кодекс jQuery:

$(document).ready(function() {

    $(".eliminar").click(function(e) {

        e.preventDefault();
        //Obtengo el id desde nuestro boton.
        var id = $(this).attr('data-id');       

        //Mi alert lanza correctamente el id associado.
        //alert(id);
        $(this).closest('.holder-cesta').remove();//Remueve correctamente           
        //AJAX
        //Aqui viene mi problema,no obtengo var id en $.post y tampoco parece que vaya a la url eliminar.php
        $.post('./php/carro_compra/eliminar.php', {
            Id:id
        },function(a) {
            if (a=='0') {
                location.href="./cesta";
            }
        });


    });
});

если я делаю один var_dump($_POST['Id']); в моем архиве eliminar.php, действительно не ace совсем не вышеупомянутая функция, если я изменяю немного ajax, посылает мне NULL.

jQuery Вы функционируете хорошо, так как Вы бросаете в меня правильно alert, и также меня удаляет div .holder-корзина, но проблема - как будто никогда Вы не идете к url $.post где я хочу actuailzar array посредством Id следующего способа:

if ($arreglo[$i]['Id']!= $_POST['Id']) {

}

Я присоединяю также архив eliminar.php с тем, который я хочу обновить мою тележку покупок, удалив продукт:

  <?php
//Session start
session_start();
//Get shoping cart data.
$arreglo = $_SESSION['carrito'];

for ($i=0; $i<count($arreglo); $i++) { 
    //Logica, si id del articulo es diferente a la variable obtenido por Ajax.
    if ($arreglo[$i]['Id']!= $_POST['Id']) {

        $datosnuevos[] = ['Id' => $arreglo[$i]['Id'], 'Titulo' =>$arreglo[$i]['Titulo'], 'Precio' => $arreglo[$i]['Precio'], 'Icon' => $arreglo[$i]['Icon'], 'Cantidad' => $arreglo[$i]['Cantidad'] ];
    }
}

if (isset($datosnuevos)) {
    //Modifico la sesion, dejando el resto de articulos comprados.
    $_SESSION['carrito'] = $datosnuevos;
    //Modificamos el valor del carro.
    $data = $_SESSION['carrito'];
    $value_carrito = count($data);
    $_SESSION['compras'] = $value_carrito;
    //Asi tambien se recarga la página con los datos actualizado
    echo "0";

} else {
    unset($_SESSION['carrito']);
    unset($_SESSION['compras']);
    echo "0";
}
?>
4
задан 11.10.2016, 04:23
2 ответа

Хорошие, podrГ, - чтобы быть, потому что ты удаляешь перед тем, как делать то, что ты хочешь? Сначала ты удаляешь:

$(this).closest('.holder-cesta').remove();//Remueve correctamente

и потом ты хочешь консультировать id: Id:id но просвет, уже он не существует, пытается в сначала делании всего того, что ты хочешь, и в конце концов удалении того, что ты хочешь:

$(document).ready(function() {

    $(".eliminar").click(function(e) {

        e.preventDefault();
        //Obtengo el id desde nuestro boton.
        var id = $(this).attr('data-id');       

        //Mi alert lanza correctamente el id associado.
        //alert(id);         
        //AJAX
        //Aqui viene mi problema,no obtengo var id en $.post y tampoco parece que vaya a la url eliminar.php
        $.post('./php/carro_compra/eliminar.php', {
            Id:id
        },function(a) {
            if (a=='0') {
                location.href="./cesta";
            }
        });
 $(this).closest('.holder-cesta').remove();//Remueve correctamente 

    });
});
0
ответ дан 24.11.2019, 13:09
  • 1
    стой, я попытаюсь aver, если я удаляю линию .remove (); aver, если меня выбирает документ Аякса. –  D.Bulten 10.10.2016, 23:14
  • 2
    И протестированный, но мне продолжает делать то же самое, если потом я это думаю, действительно я получаю прежде чем я перемещаю div, var пойдите = $ (this) .attr (и #39; дата пойдите и # 39;); с id, –  D.Bulten 10.10.2016, 23:17

cart.php

//Carro de la compra

//Si esta definida la ID obtenido por URL
if (isset($_GET['articulo'])) {

    $id_tutorial = $_GET['articulo'];//Obtenemos el ID del tutorial añadido, para poder acer comprobaciones a mostrar otros resultados.

    //Si esta definido la sesion carro -> es decir si ay algun articulo comprado
    if (isset($_SESSION['carrito'])) {

        $arreglo = $_SESSION['carrito'];
        $encontro = false;      

        for ($i=0; $i<count($arreglo); $i++) { 

            if ($arreglo[$i]['Id'] == $_GET['articulo']) {
                $encontro = true;               
            }
        }

        if ($encontro == false) {


            $titulo = "";
            $precio = 0;
            $precioUSD = 0;
            $icon = "";

            $stmt = $c->prepare("SELECT titulo,precio,icon,id_autor FROM tutoriales WHERE page=? and status=1");
            $stmt->bind_param("i",$_GET['articulo']);
            $stmt->execute();
            $stmt->store_result();
            if ($stmt->num_rows > 0) {
                $stmt->bind_result($titulo,$precio,$icon,$id_autor);
                while ($stmt->fetch()) {

                    //Sentencia prepare -> autor proyecto
                    $stmtN = $c->prepare("SELECT autor FROM autor WHERE id_autor=?");           
                    $stmtN->bind_param("i", $id_autor);         
                    $stmtN->execute();          
                    $stmtN->bind_result($autor);            
                    $stmtN->fetch();            
                    $stmtN->close();

                    $datosnuevos = array('Id' => $_GET['articulo'], 'Titulo' => $titulo, 'Precio' => $precio, 'Icon' => $icon, 'Cantidad' => 1 );

                    /*
                        #Si se utiliza array_push() para añadir un solo elemento al array, es mejor utilizar $array[] = ya que de esta forma no existe la sobrecarga de llamar a una función. 
                    */

                    //array_push($arreglo, $datosnuevos); 
                    $arreglo[] = $datosnuevos;
                    $_SESSION['carrito'] = $arreglo;

                    $data = $_SESSION['carrito'];
                    $value_carrito = count($data);
                    $_SESSION['compras'] = $value_carrito;

                } $stmt->close();


            } else {
                $stmt->close();
            }
        }   

    } else { //Caso falso añadimos primer articulo al carro

        $titulo = "";
        $precio = 0;
        $precioUSD = 0;
        $icon = "";

        $stmt = $c->prepare("SELECT titulo,precio,icon,id_autor FROM tutoriales WHERE page=? and status=1");
        $stmt->bind_param("i",$_GET['articulo']);
        $stmt->execute();
        $stmt->store_result();
        if ($stmt->num_rows > 0) {
            $stmt->bind_result($titulo,$precio,$icon,$id_autor);
            while ($stmt->fetch()) {

                //Sentencia prepare -> autor proyecto
                $stmtN = $c->prepare("SELECT autor FROM autor WHERE id_autor=?");           
                $stmtN->bind_param("i", $id_autor);         
                $stmtN->execute();          
                $stmtN->bind_result($autor);            
                $stmtN->fetch();            
                $stmtN->close();

            } $stmt->close();

        } else {
            $stmt->close();
        }       

            $arreglo[] = array('Id' => $_GET['articulo'], 'Titulo' => $titulo, 'Precio' => $precio, 'Icon' => $icon, 'Cantidad' => 1 );

            $_SESSION['carrito'] = $arreglo;

            $data = $_SESSION['carrito'];
            $value_carrito = count($data);
            $_SESSION['compras'] = $value_carrito;

            //echo "<script>window.location.reload();</script>";


    }

} 

cesta.php Здесь я звоню в тележку, и где я удаляю добавленные статьи

<?php //Mostramos resultados carro de la compra.

    //Resetemos el total.
    $total = 0;

    //Si esta definido la sesión.
    if (isset($_SESSION['carrito'])) {              

        //Array con datos carrito.
        $data = $_SESSION['carrito'];
        $total = 0;                                     

        //Recorremos todo el array, para salida de datos.
        for ($i=0; $i<count($data); $i++) {
?>

            <div class="holder-cesta">
                <h4><?php echo $data[$i]['Titulo']; ?></h4>
                <p><?php echo $data[$i]['Precio']; ?></p>
                <?php                   
                $total = ($data[$i]['Cantidad'] * $data[$i]['Precio']) + $total;
                ?>

                <button class="eliminar" data-id="<?php echo $data[$i]['Id']; ?>">Eliminar</button>

            </div>

<?php
        }
    } else {
        echo "0 articulos";
    } unset($arreglo);
?>

Файл eliminar.php

<?php
//Session start
session_start();
//Get shoping cart data.
$arreglo = $_SESSION['carrito'];

//Reset.
$arr[] ='';


var_dump($arreglo);

//var_dump($_POST['Id']);

for ($i=0; $i<count($arreglo); $i++) { 

    if ($arreglo[$i]['Id']!= $_POST['Id']) {

        //$datosnuevos = ['Id' => $arreglo[$i]['Id'], 'Titulo' =>$arreglo[$i]['Titulo'], 'Precio' => $arreglo[$i]['Precio'], 'Icon' => $arreglo[$i]['Icon'], 'Cantidad' => $arreglo[$i]['Cantidad'] ];
        $arr[] =$arreglo[$i]
    }
}

if (isset($arr)) {

    $_SESSION['carrito'] = $arr;

    $data = $_SESSION['carrito'];
    $value_carrito = count($data);
    $_SESSION['compras'] = $value_carrito;

} else {
    unset($_SESSION['carrito']);
    unset($_SESSION['compras']);
    echo "0";
}
?>
2
ответ дан 24.11.2019, 13:09
  • 1
    Это и измененный и протестированный, но продолжи быть равным, хотя он удалит все из arhivo удалять и просто я делаю один начинаю и # 39; Привет мир и # 39;; также не печатай. И файл эта связала правильно, что уже это и проверенный, измененный имя, и т.д., все то, что приходило в голову бы одному! Но мне не удается получить результаты с eliminar.php. Какой-то другой метод существует, если кто-то pudiero помещать другой пример я также санкционирую в то, что я ищу? –  D.Bulten 11.10.2016, 02:54
  • 2
    Ты попытался вынуждать, что он возвратил тебе 0?. В случае, если корзина не est и # 233; опустоши, не моги возвращать рукописный шрифт reload, обязанности и # 237; схвати помещать это в код –  Jose Javier Segura 11.10.2016, 02:58
  • 3
    Стой, я удалю reload, в случае когда обновит корзину. Сначала, если, что funcionabe, если только была статья в моей корзине, и он ему был должен, чтобы удалять, я функционировал правильно код, но в случае когда у него было более одного продукта, уже он не входил в логику! = $ _POST. Обруч пытаясь уже даже не входит в случай 0 XD –  D.Bulten 11.10.2016, 03:06
  • 4
    Если я усиливаю 0, функционируй, меня изменяет все правильно и перезагружает меня оно она функционирует ajax function (a). просто только я это оставляю в eliminar.php: session_start (); unset ($ _SESSION [и #39; тележка и # 39;]); unset ($ _SESSION [и #39; ты покупаешь и # 39;]); я начинаю " 0"; –  D.Bulten 11.10.2016, 03:18
  • 5
    Измените мой ответ, с которым ты был бы должен иметь более или менее в твоих файлах, так в eliminar.php, как в тележке –  Jose Javier Segura 11.10.2016, 03:20