0

PHPを使用して配列に新しい値をプッシュしようとしています

$select_all_schools = "SELECT * FROM schools ";
$query = mysql_query($select_all_schools) OR die(mysql_error());

while($row = mysql_fetch_array($query)){
    $item=array(    
        'school_name' => $row['school_name'],
        'school_address' => $row['school_address'],
        'school_id' => $row['school_id'],
    );

    $select_sections = "SELECT * FROM section WHERE school_id = '".$row['school_id']."'";

    $query_section = mysql_query($select_sections) or die(mysql_error());
    $sections_counts = mysql_num_rows($query_section);
    $select_sections_deped_archive = "SELECT * FROM deped_grade_archive 
                                      WHERE school_id = '".$row['school_id']."'
                                      GROUP BY section_id ";

    $query_section_deped_archive = mysql_query($select_sections_deped_archive) or die(mysql_error());
    $sections_counts_grade_archive = mysql_num_rows($query_section_deped_archive);

    if($sections_counts_grade_archive == $sections_counts ){
         $item['stat'] = 'Complete';
    }
    else{
        $item['stat'] ='Incomplete';
    }
}           

echo json_encode($item);

次に、ajaxを使用して値を取得します

function get_all_school_status(){
    $.ajax({
        type:'POST',
        url:'deped_functions.php',
        dataType:'json',
        data:{'func_num':'1'},
        success:function (data){
            $.each(data, function(i, item) {
               html = "<tr>";
               html += "<td style='width:20%;'><input type='radio' name='school_id' value='"+data[i].school_id+"'></td>";
               html += "<td style='width:25%;'><label>"+data[i].stat+"</label></td>";
               html += "<td style='width:55%;'><label >"+data[i].school_name+"</label></td>";
               html += "</tr>";

               $('#table-schools-content').append(html);
           });
       }
   });
}
get_all_school_status();

残念ながら、私のコンソールはphpからajaxへの値を適切に取得していることを示していますが、未定義の値を取得しています。私は何をしましたか?..みんなを助けてください。事前にt​​nx

4

2 に答える 2

1

コードの Js 部分は正しいですが、php 配列の形式が間違っています。
上記のコードを置き換えてみてください。間違いはコメントされています。

$count = 0; // keys of array
while($row = mysql_fetch_array($query)){
    $count++; // in prevoius version you get only one row from table
    // correct version of school array
    $item[$count] = array(    
        'school_name' => $row['school_name'],
        'school_address' => $row['school_address'],
        'school_id' => $row['school_id'],
    );

    $select_sections = "SELECT * FROM section WHERE school_id = '".$row['school_id']."'";

    $query_section = mysql_query($select_sections) or die(mysql_error());
    $sections_counts = mysql_num_rows($query_section);
    $select_sections_deped_archive = "SELECT * FROM deped_grade_archive 
                                      WHERE school_id = '".$row['school_id']."'
                                      GROUP BY section_id ";

    $query_section_deped_archive = mysql_query($select_sections_deped_archive) or die(mysql_error());
    $sections_counts_grade_archive = mysql_num_rows($query_section_deped_archive);

    if($sections_counts_grade_archive == $sections_counts ){
        // success or error message with key 'status'
        $item[$count]['status'] = 'Complete';
    }
    else{
         $item[$count]['status'] = 'Incomplete';
    }
}

この結果: http://clip2net.com/s/2MJmt

于 2013-02-02T15:30:33.383 に答える
-1

jQuery .eachメソッドは、配列をトラバースするために使用されるのではなく、HTML要素をトラバースするために使用されることを意図しています。学校の配列は、通常、FORループを使用してトラバースする必要があります。

success: function(data) {
               if(typeof data == "string")   //handle PHP errors - this happens if non-json string is returned by a server
                   alert("JQuery failed to convert data to JS object!");
               for(var i=0; i<data.length; i++) {
                   /*Do whatever with data[i]*/
               }
         }

データ配列にdata["school1"]などの*順序付けされていないキーが含まれている場合は、PHPforeachと同様のキーを使用する必要がありますfor(var i in data)

また、それについてはよくわかりませんdataType:'application/json'が、正しいjsonmimeタイプであるが必要だと思います。

于 2013-02-02T12:55:42.190 に答える