JavaScript数组未使用Ajax发布到PHP文件

JavaScript数组未使用Ajax发布到PHP文件,javascript,php,jquery,html,ajax,Javascript,Php,Jquery,Html,Ajax,我有一个JavaScript数组,它取自一个html表单,它是复选框。我使用name=“dayselected[]”将数据放入一个数组中,我可以将该数组传递给Ajax。当我将数据登录到控制台时,我知道数据将进入数组,但在PHP页面上它似乎丢失了。我正在尝试收集所选项目并打开一个新页面,然后将数据发布到此页面 我曾尝试将其编码为json,然后用PHP对其进行解码,但我一直得到一个空值。我也尝试过使用JSON,但仍然不起作用 我使用var_dump发现我返回的是空值 <form>

我有一个JavaScript数组,它取自一个html表单,它是复选框。我使用name=“dayselected[]”将数据放入一个数组中,我可以将该数组传递给Ajax。当我将数据登录到控制台时,我知道数据将进入数组,但在PHP页面上它似乎丢失了。我正在尝试收集所选项目并打开一个新页面,然后将数据发布到此页面

我曾尝试将其编码为json,然后用PHP对其进行解码,但我一直得到一个空值。我也尝试过使用JSON,但仍然不起作用

我使用var_dump发现我返回的是空值

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

     });

法律模块
第一天
第2天啮齿动物
第2天大型动物
第2天水生动物
第2天野生动物
--选择要注册的学生人数-- $('.Register Multiple')。on('change',函数(e){ var课程=[]; $(“输入[类型=复选框]:选中”)。每个(函数(){ courses.push($(this.val()); log($(this.val()); }); $.ajax({ 类型:“POST”, url:“../wp内容/主题/流量/多个- registration.php', 数据:{courses:courses},//序列化表单的元素。 成功:功能(数据) { 控制台日志(数据); window.open('../../wp- content/themes/traffica/Multiple registration.php'); } });
}));
数组可以通过两种方法传递

//first is serialize
$result = serialize($array);
//second method 
$result = json_encode($array);
在您的情况下,如果数组有非UTF8字符串或其他问题,json可能会失败,那么您可以使用serialize insted 如果您喜欢json,那么可以将字符集检查为UTF8

给它一个try并检查error.log,查看您在更改函数结束括号中缺少的任何输出

请添加更改功能的结束括号

请添加代码并运行它

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

您能否共享此请求的浏览器网络检查器中显示的内容?只是为了检查请求主体是否在那里以及它是如何发送的。你有一个输入错误。只需删除最后一个输入元素后面的结束标记,即我错误粘贴的表单标记。我会编辑这个。其他一切都正常,但Ajax似乎没有发布阵列。另外,在网络选项卡data:$(“input[type=checkbox]:checked”)中没有显示任何内容。serialize()如何在php中转储它?error.log中有什么内容?或者你有像nginx或varnish这样的代理服务器吗?我现在可以在使用console.log(data)将阵列登录到控制台时获取阵列;在success函数中,但当它触发window.open('../../wp content/themes/traffica/Multiple registration.php');它失去了值我理解,但你应该知道window.open有时会被浏览器阻止,尤其是Firefox和chrome导致自动弹出广告类型使用此功能,迫使浏览器打开其他页面,这些页面是广告页面,所以我认为它已被browserI阻止。我愚蠢地在原始代码中使用了结束括号没有包括在样本中。