Jquery - флажок сравнения продуктов с ajax - PullRequest
0 голосов
/ 11 апреля 2019

Я пытаюсь сравнить продукт

  • 1 / покупатель отметит один или несколько флажков сравнения
  • 2 / когда отображается флажок, внизу появляется сообщение
  • 3 / значение флажка сохраняется в сеансе

Моя проблема в ajax, кажется, не вставляет значение флажка в сеансе.

Спасибо.

Я начал с того, что

<div><input type="checkbox" value="1" id="P1" /> P1</div>
<div><input type="checkbox" value="2" id="P2" /> P2</div>
<div><input type="checkbox" value="3" id="P3" /> P3</div>

<div id="container" style="display:none;"> 
    <div class="col-md-12 alert alert-info text-md-center">
        <a href="products_compare">Compare</div>
    </div>
</div>

сценарий

<script>
   $(function() {
$('input[type=checkbox]').change(function(){   
    var chkArray = [];   
    $('#container').html('');

    //put the selected checkboxes values in chkArray[]
    $('input[type=checkbox]:checked').each(function() {
        chkArray.push($(this).val());
    });


    //If chkArray is not empty show the <div> and create the list
    if(chkArray.length !== 0){
        $('#container').show();           
        $.each(chkArray, function(i, val) { 
            $('<p>').text(chkArray[i]).appendTo('#container');

             $.ajax({
                method: 'POST',
                url : "http://localhost/shop/ext/ajax/products_compare/compare.php",
                data : {product_id:chkArray[i]},
                success : function(resp){
                    alert("Product is added to be compared");
                }
            });               
        });
    }else{
        $('#container').hide();   
        $('#container').html('');
    }
});
* *} 1 022)

файл ajax

$product_id = $_POST['product_id'];

if(!is_array($_SESSION['ids'])) {
  $_SESSION['ids'] = [];
} else {
  array_push($_SESSION['ids'], $product_id);
}

1 Ответ

0 голосов
/ 12 апреля 2019

Вам необходимо добавить session_start(); перед использованием переменной $_SESSION. Вы должны проверить, установлен ли $_SESSION['ids'], используя isset().

session_start();
$product_id = $_POST['product_id'];
$_SESSION['ids'] = $product_id;

Это должно сработать, пожалуйста, проверьте это.

Тем не менее, я бы реструктурировал ваш код JavaScript, чтобы уменьшить количество отправляемых запросов. В данный момент вы отправляете отдельный запрос для каждого флажка, а не просто отправляете один массив (просто удалите цикл $.each).

if(chkArray.length !== 0){      
    $.ajax({
            method: 'POST',
            url : "http://localhost/test/test2.php",
            data : {product_id: chkArray},
            success : function(resp){
                alert("Product is added to be compared");
            }
        });  
}

Помните, что теперь вы добавляете массив в массив каждый раз, когда выполняете POST.

Array
(
    [0] => Array
        (
            [0] => 1
        )

    [1] => Array
        (
            [0] => 1
            [1] => 3
        )

)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...