Как передать значение внутри js

#javascript #php #jquery #ajax

#javascript #php #jquery #ajax

Вопрос:

У меня это NULL VALUE $_SESSION внутри моего compare.php Вы знаете, как это исправить?

Спасибо

Функция js :

 $(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');
            });


            $('#rectButton').on('click', function (e) {     
             $.ajax({
                method: 'POST',
                url : "http://localhost/shop/ext/ajax/products_compare/compare.php",
                data : {product_id:chkArray},
/*
                success : function(resp){
                    alert("Product is added to be compared" );
                }
*/                
             });
           });

        }else{
            $('#container').hide();   
            $('#container').html('');
        }
    });    
})             
</script>

<button id="rectButton" class="btn"><a href="compare.php">Compare</a></button> 
  

мой файл ajax

  $product_id = $_POST['product_id'];

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

результат файла ajax :

 product_id[]: 12
product_id[]: 10
product_id[]: 9
  

мой файл compare.php о результате ajax.

 var_dump($_SESSION] ===> NULL
var_dump($_SESSION]N['ids']; ===> NULL


result I see:
array(1) { ["ids"]=> array(5) { [0]=> array(1) { [0]=> string(2) "10" } [1]=> array(2) { [0]=> string(2) "10" [1]=> string(1) "9" } [2]=> array(1) { [0]=> string(1) "9" } [3]=> array(2) { [0]=> string(2) "12" [1]=> string(1) "9" } [4]=> array(3) { [0]=> string(2) "12" [1]=> string(2) "11" [2]=> string(1) "9" } } }
  

хороший результат, чтобы иметь :

 [4]=> array(3) { [0]=> string(2) "12" [1]=> string(2) "11" [2]=> string(1) "9" } 
  

Комментарии:

1. Есть ли у вас session_start() в начале обоих сценариев?

2. Не связано с проблемой, которую вы описываете, но $_SESSION['ids'] = []; должно быть $_SESSION['ids'] = [$product_id]; . В противном случае первый вызов AJAX не сохранит свой идентификатор продукта.

3. $_POST['product_id'] это массив, а не один идентификатор продукта. Так $_SESSION['ids'] будет 2-мерный массив. Это то, чего вы действительно хотите?

4. Почти всегда неправильно привязывать обработчик событий внутри другого обработчика событий. Каждый раз, когда вы меняете флажок, вы добавляете другой обработчик щелчка #rectButton , поэтому он будет запускаться несколько раз при нажатии.

5. @Barmar. Я пытался с этим $_SESSION[‘ids’] = [$product_id];. но результат всегда равен нулю для var_dump($ _SESSION);

Ответ №1:

Поскольку $_POST['product_id'] это массив, вы не должны помещать весь массив в переменную сеанса как один элемент, поэтому вы получаете 2-мерный массив. Вы должны просто присвоить новый массив переменной сеанса, поскольку он содержит все элементы, которые проверил пользователь.

 $_SESSION['ids'] = $_POST['product_id'];
  

Вы не должны привязывать обработчик щелчка внутри обработчика изменений. Вы должны связать два обработчика независимо, и они оба могут использовать глобальную chkArray переменную.

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

    //put the selected checkboxes values in chkArray[]
    chkArray = $('input[type=checkbox]:checked').map(function() {
      return this.value;
    }).get();

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

  $('#rectButton').on('click', function(e) {
    $.ajax({
      method: 'POST',
      url: "//localhost/shop/ext/ajax/products_compare/compare.php",
      data: {
        product_id: chkArray
      },
      /*
      success: function(resp) {
        alert("Product is added to be compared");
      }
      */
    });
  });

})  

Комментарии:

1. Хорошо, спасибо за эти объяснения. Это более понятно. Я ищу результат около 4 идентификаторов checkbobx (12-11-10-9). результатом внутри файла ajax является var_dump($_SESSION[‘ids’]) ==>array(1) { [«ids»]=> array(2) { [0]=> array(1) {[0]=> string(2) «10» }[1]=> массив (2) {[0]=> строка(2) «10» [1]=> строка (1) «9» } } } После дополнительной проверки всегда принимает последний идентификатор 10 — 9. Другой идентификатор находится внутри сеанса.

2. Как вы вызываете файл ajax? Единственный AJAX, который вы опубликовали compare.php , это что-то еще?