2012-04-06 10 views
1

Ich habe Auswahllisten auf einer Seite und ich durchlaufe alle Auswahllisten. Die Werte sind "Standard", "Entschuldigt nicht vorhanden" und "Entschuldigt spät". Standard ist im Grunde "Select ...". Ich möchte das nicht an den Server weitergeben oder irgendwelche Bearbeitungen damit machen, da es sinnlos ist.Warum bekomme ich NULL-Werte in diesem Array?

Das ist meine 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 
      }; 
     }  
    }); 

Dies funktioniert, weil es die richtige Menge an Zeit jedes Mal, wenn ich es testen, in diesem Fall 3 mal falsch druckt. Allerdings ist das Problem auf der Serverseite (denke ich?). Wenn ich die Variable drucke, bekomme ich NULL, NULL für die Anzahl der Male, die Standard in jQuery gefunden wurde. Sicher, ich sollte nur ein Array der Größe 3 ohne NULLs bekommen.

Das ist das, was in PHP gedruckt:

$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" 
    } 
} 

Das ist mein AJAX:

students = JSON.stringify(students) 

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

      console.log(response);   
     }); 
    } 

Ich verstehe nicht, warum ich NULLs erhalten, wenn es nicht einmal die Aussage, wenn Eingabe nicht in jQuery.

Antwort

1

Ihr Problem ist hier in dieser Zeile:

students[k] = 

Stattdessen sollten Sie verwenden .push()

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

Ihr k Wert ist der Index des attendSelect Sie verarbeiten. Wenn Sie Ihr Schüler-Array erstellen, weisen Sie diese Indexschlüssel zu, anstatt nur ein neues Array zu erstellen. Javascript füllt die fehlenden Indizes mit NULL-Werten.

+0

Sortiert. Vielen Dank :) –

1

Ein Array in JSON kann Indizes nicht überspringen.

Sie können die Werte null herausfiltern, indem Sie array_filter verwenden (übergeben Sie nichts als zweites Argument).

Verwandte Themen