2012-04-06 9 views
1

私はページ上で選択リストを持っており、すべての選択リストを反復しています。値は、 "default"、 "Excuses Absent"、および "Excused Late"です。デフォルトは基本的には「選択...」です。私はそれを無意味なので、サーバーに渡したり、処理をしたりしたくありません。この配列でNULL値を取得するのはなぜですか?

これは私の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回を、私はそれをテストするたびに倍の虚偽の正しい量を出力しますので、これは動作します。しかし、問題はサーバー側にあります(私は思っていますか?)。変数を出力すると、jQueryでデフォルトが見つかった時間をNULLにしてNULLが返されます。確かに、私は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);   
     }); 
    } 

それも、if文を入力していないとき、私はNULLを取得する理由を私は理解していませんjQueryであなたの問題は、ここで、このラインである

答えて

1

代わり
students[k] = 

、あなたはあなたのk値は、あなたが処理しているattendSelectの指標である.push()

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

を使用する必要があります。生徒の配列を作成するときは、新しい配列を作成するのではなく、それらのインデックスキーを割り当てます。 Javascriptは、欠落しているインデックスにNULL値を「埋め込む」。

+0

ソート済みです。ありがとう:) –

1

JSONの配列はインデックスをスキップできません。

あなたは(2番目の引数として何も渡さない)array_filterを使用してnull値をフィルタリングすることができます。

関連する問題