1

我在页面上有选择列表,并且正在遍历所有选择列表。值是“默认”、“Excused Absent”和“Excused Late”。默认基本上是“选择...”。我不想将它传递给服务器或对其进行任何处理,因为它毫无意义。

这是我的 jQuery:

    attendSelect.each(function(k, v)
    {
        attendance = $(this).val();

        if(attendance != "default")
        {   
            console.log(attendance == "default");
            students[k] = 
            {
                lesson : $(this).attr('id'),
                student_id : $(this).attr('name'),
                attendance  : attendance
            };
        }    
    });

这是有效的,因为每次我测试它时它都会打印错误的正确次数,在这种情况下为 3 次。但是,问题出在服务器端(我认为?)。当我打印变量时,我得到 NULL,NULL 表示在 jQuery 中找到默认值的次数。当然,我应该只得到一个没有 NULL 的大小为 3 的数组。

这是用 PHP 打印的:

$students = json_decode($_POST['students'], true);
var_dump($students);

array(12) {
  [0]=>
  NULL
  [1]=>
  NULL
  [2]=>
  NULL
  [3]=>
  array(3) {
    ["lesson"]=>
    string(9) "lesson[7]"
    ["student_id"]=>
    string(12) "student[241]"
    ["attendance"]=>
    string(14) "Excused Absent"
  }
  [4]=>
  array(3) {
    ["lesson"]=>
    string(9) "lesson[7]"
    ["student_id"]=>
    string(12) "student[270]"
    ["attendance"]=>
    string(12) "Excused Late"
  }
  [5]=>
  NULL
  [6]=>
  NULL
  [7]=>
  NULL
  [8]=>
  NULL
  [9]=>
  NULL
  [10]=>
  NULL
  [11]=>
  array(3) {
    ["lesson"]=>
    string(9) "lesson[9]"
    ["student_id"]=>
    string(12) "student[317]"
    ["attendance"]=>
    string(14) "Excused Absent"
  }
}

这是我的 AJAX:

students = JSON.stringify(students)

    if(attendSelect.length)//protect against submitting on past lessons
    {
        $.post('',  { students : students, cid: cid }, function(response)
        {

            console.log(response);          
        });
    }

我不明白为什么当它甚至没有在 jQuery 中输入 if 语句时我会得到 NULL。

4

2 回答 2

1

您的问题在这里:

students[k] = 

相反,您应该使用.push()

students.push(
        {
            lesson : $(this).attr('id'),
            student_id : $(this).attr('name'),
            attendance  : attendance
        });

您的k值是attendSelect您正在处理的索引。当您创建学生数组时,您正在分配这些索引键,而不仅仅是创建一个新数组。Javascript 正在用 NULL 值“填充”缺失的索引。

于 2012-04-06T20:26:05.483 回答
1

JSON 中的数组不能跳过索引。

null您可以使用array_filter(不要将任何内容作为第二个参数传递)过滤掉这些值。

于 2012-04-06T20:27:54.673 回答