2017-04-04 1 views
1

Ich versuche, eine Add-in-Cart-Funktion über Ajax zu entwickeln, das Problem ist, dass egal welches Produkt ich in den Warenkorb hinzufügen, fügt es das letzte Element auf der Liste und dann inkrementiert das gleiche Produkt auf Klicken Sie auf ein anderes Produkt. Hier ist mein Code: -Ajax Call gibt nur letzte ID

<?php   
    $i = 1; 
    while($row = mysqli_fetch_array($run_products)){ 
    $op_id = $row['option_id']; 

    echo "<tr>"; 
    echo "<td>" . $i . "</td>"; 
    echo "<td>" . $row['option_desc'] . "</td>";  
    echo "<td> 

    <form action='' method='post' class='p_form'> 
     <input type='text' name='product_id' value='$op_id' pid='$op_id'> 
     <input type='text' name='quantity' value='1' pid='$op_id'> 
     <input class='btn btn-primary add' type='submit' name='add_to_cart' value='Add to Cart' id='product' pid='$op_id'> 
    </form> 
    </td>"; 
    echo "</tr>";   
    $i++; 
} 
?> 

Hier ist jquery:

<script type="text/javascript"> 

$(document).ready(function(){ 

    $(document).on('click','.p_form',function (event) {  
     event.preventDefault(); 

     var element = $(this); 
     var id = element.attr("pid"); 
     //alert(id); 

       $.ajax({ 

        url: 'action.php', 
        method: 'post', 
        //data: {id:id}, 
        data:$('.p_form').serialize(), 
        success: function(data){ 

         $('#message').html(data);       
        } 
       }); 

     return false; 

    }); 

}); 
</script> 

hier action.php ist, der $ product_id immer wieder als 4 (zum Beispiel), wenn die letzte ID in den letzten 4

if (!empty($_POST)){ 
    $product_id = $_POST['product_id']; 
    echo $product_id; 
} 
+2

In Ajax verwendet man Daten: $ serialisiert() ('p_form.'). , was bedeutet, dass der letzte Wert aus der multiplen Klasse genommen wird. Sie können also für jedes Formular unterschiedliche Klassennamen oder IDs erstellen und diesen Wert abrufen. Es wird also kein doppeltes Problem geben – Karthick

+0

, weil Sie dasselbe Formular mit demselben Namen erstellen. so wird es nur letzte Form nehmen. – Gaurav

+0

Verwenden Sie 'data: $ (this) .serialize()' – Phil

Antwort

0

Need es wie unten zu tun: -

<script type="text/javascript"> 

$(document).ready(function(){ 
    $(document).on('click','.add',function (event) {//instead of form click add event on form button click  
     event.preventDefault(); 
     var element = $(this); 
     var id = element.attr("pid"); 
     //alert(id); 

      $.ajax({ 
       url: 'action.php', 
       method: 'post', 
       data:element.parent('.p_form').serialize(), //serialize clicked button parent form 
       success: function(data){ 
        $('#message').html(data);       
       } 
      }); 
     return false; 
    }); 
}); 
</script> 
+0

Danke, würdest du bitte erklären, was in deinem Code passiert? –

+0

@KaleemShahid bereits durch Kommentare erläutert. Es ist sehr einfach. Ich habe Klick-Ereignis zu jedem Formular-Senden-Button hinzugefügt. wenn irgendein Knopf geklickt wurde, versuchte ich, das entsprechende Formular zu holen und es zu serialisieren. Vielen Dank –

0

Trigger-Klick-Ereignis auf die Schaltfläche klicken nicht auf dem Formular klicken:

Dies wird für y arbeiten Ou für jedes Produkt.

<script type="text/javascript"> 

$(document).ready(function(){ 

    $(document).on('click','.add',function (event) {  
     event.preventDefault(); 

     var element = $(this); 
     var id = element.attr("pid"); 
     //alert(id); 

       $.ajax({ 

        url: 'action.php', 
        method: 'post', 
        data: {id:id}, //send id of product you wish to add 
        success: function(data){ 

         $('#message').html(data);       
        } 
       }); 

     return false; 

    }); 

}); 
</script> 

Und auf Server-Seite:

if (!empty($_POST)){ 
    $product_id = $_POST['id'];//get only that id posted in ajax call 
    echo $product_id; 
}