Массив JavaScript, не отправляемый в PHP-файл с использованием Ajax

#javascript #php #jquery #html #ajax

#javascript #php #jquery ( jquery ) #HTML #аякс

Вопрос:

У меня есть массив JavaScript, который берется из html-формы, которые являются флажками. Я использую name = «DayChosen[]», чтобы получить данные в массив, который я могу передать в Ajax. Я знаю, что данные поступают в массив, когда я вхожу в консоль, но, похоже, они просто теряются при переходе на страницу PHP. Я пытаюсь собрать выбранные элементы, открыть новую страницу и опубликовать данные на этой странице.

Я пытался закодировать его в json, а затем декодировать с помощью PHP, но я продолжаю получать нулевое значение. Я также пробовал использовать JSON, но все равно ничего не вышло.

Я использовал var_dump, чтобы обнаружить, что i возвращает нулевое значение.

    <form> 
    <input type = "checkbox" class="CourseDay" name = "DayChosen[]"  value = "Legal"><i class="checkbox-pposition DayChosen">Legal Module</i><br>        
    <input type = "checkbox" class="CourseDay" name = "DayChosen[]"  value = "Day 1"/><i class="checkbox-pposition DayChosen">Day 1</i><br>
    <input type = "checkbox" class="CourseDay" name = "DayChosen[]"  value = "Rodent"/><i class="checkbox-pposition DayChosen">Day 2 Rodent</i><br>
    <input type = "checkbox" class="CourseDay" name = "DayChosen[]"  value = "Large animal"><i class="checkbox-pposition DayChosen">Day 2 Large animal </i><br>
    <input type = "checkbox" class="CourseDay" name = "DayChosen[]"  value = "Aquatic"><i class="checkbox-pposition DayChosen">Day 2 Aquatic</i><br>
    <input type = "checkbox" class="CourseDay" name = "DayChosen[]"  value = "Wildlife"><i class="checkbox-pposition DayChosen">Day 2 Wildlife</i><br>

<select class="Register-Multiple form-control">
     <option disabled selected value > -- Select number of Students to Register -- </option>
  <?php 
      for ($x = 1 ; $x <= 10; $x  ) {
         echo '<option value = '.$x.'>'.$x.'</option>';
      } 
  ?>
</select>

     <input type="submit" id = "Register" class="col-6 text-center btn btn-primary Register" value="Register">
  </form>



  <script type="text/javascript">




  $('.Register-Multiple').on('change', function (e){



var courses = [];
$("input[type=checkbox]:checked").each ( function() {
      courses.push($(this).val());
      console.log($(this).val());

});


$.ajax({
       type: "POST",
       url:  '../../wp-content/themes/traffica/Multiple- 
registration.php',
       data: {courses:courses}, // serializes the form's elements.
       success: function(data)
       {

          console.log(data);

              window.open('../../wp- 
content/themes/traffica/Multiple-registration.php');
       }

     });
 

});

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

1. Можете ли вы поделиться тем, что отображается в инспекторе сети браузера для этого запроса? Просто чтобы проверить, существует ли тело запроса и как оно отправляется.

2. У вас опечатка. Просто удалите закрывающий тег </form> после последнего входного элемента

3. Тег формы, который я вставил по ошибке. Я отредактирую это. все остальное работает, я Ajax просто, похоже, не публикует массив. Кроме того, на вкладке Сеть ничего не отображается

4. попробуйте данные: $(«ввод [тип=флажок]: установлен»).сериализовать()

5. Как вы сбрасываете это в php?

Ответ №1:

Вам не хватает закрывающих скобок функции изменения

Пожалуйста, добавьте закрывающие скобки функции on change

И, пожалуйста, добавьте новый код и запустите его

 $('.Register-Multiple').on('change', function (e){
    var courses = [];
    $("input[type=checkbox]:checked").each ( function() {
       courses.push($(this).val());
       console.log($(this).val());

     });

      console.log(courses);

       $.ajax({
           type: "POST",
           url:'sample.php',
           data: {courses:courses}, // serializes the form's elements.
           success: function(data)
           {

                console.log(data);
           }

      });
});
 

И php-файл используется для получения массива

 print_r($_POST['courses']);
 

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

1. В исходном коде у меня были закрывающие скобки, которые я тупо не включил в образец.

Ответ №2:

Массив может быть передан двумя способами

 //first is serialize
$result = serialize($array);
//second method 
$result = json_encode($array);
 

В вашем случае json может завершиться с ошибкой, если в массиве есть строка, отличная от UTF8, или какая-либо другая проблема, тогда вы можете использовать serialize insted
Если вы предпочитаете json, вы можете проверить char, установленный как UTF8
Попробуйте и проверьте error.log на наличие любого вывода

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

1. Что у вас есть в error.log? Или у вас есть прокси-сервер, такой как nginx или varnish?

2. Теперь я могу получить массив, когда регистрирую его в консоли с помощью console.log(data); в функции успеха, но когда он запускает window.open(‘../../wp-content/themes/traffica/Multiple-registration.php ‘); это теряет ценность

3. Я понимаю, но вы должны знать, что window.open иногда блокируется браузером, особенно Firefox, и chrome вызывает эту функцию, используемую типом автоматической всплывающей рекламы, чтобы заставить браузер открывать дополнительные страницы, которые являются рекламными страницами, поэтому я думаю, что он был заблокирован браузером