#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 вызывает эту функцию, используемую типом автоматической всплывающей рекламы, чтобы заставить браузер открывать дополнительные страницы, которые являются рекламными страницами, поэтому я думаю, что он был заблокирован браузером