0

json_encodeを介してajaxの値を取得し、$。eachを使用して各結果を反復処理しようとしていますが、各入力はphpから未定義の値を返します。これがajaxです。

var counter_sub = 0 ;
var html;
          $.ajax({
                    type:'POST',
                    url:'add_subject.php',
               dataType:'json',
                   data:{'func_numbr':'2'},
                success:function (data){
                   $.each(data, function(i, item) {

                    html = "<tr>";
                    html += "<td><lable>Subject: </label><input type='text' name='subject["+counter_sub+"]' value='"+data[i].subj_name+"'></td>";
                    html += "<td><input type='button' id='activate' name='active' class='button' value='Active'> ";
                    html += "<input type='button' id='inactivate' name='active' class='button' value='Inactive'></td>";
                    html += "</tr>";
           $('#curr-elem-tble').append(html);

           counter_sub = counter_sub +1;
          });
                }     
         });

とphp

<?php
include_once('DBconnect.php'); 
$func_num = $_POST['func_numbr'];

switch ($func_num) {
case 1:
    insert_new_subject();
    break;
case 2:     
    get_elementary_subjects();  
    break;
 }

function insert_new_subject(){
 $level = $_POST['year_level'];
 $subjct_name =$_POST['subjct_name'];
 $units_nmber = $_POST['subjct_units'];

 $insert_subject = "INSERT INTO subjects (subject_name,level,status,subject_units)     VALUES('$subjct_name','$level','1','$units_nmber')";

                if(@!mysql_query($insert_subject)){
                    die('error insert'.mysql_error());

                    }
                    else{
                        $return ['error'] = false;
                    }

echo json_encode($return);                  
}

  function get_elementary_subjects(){

$select_subjects_elem = "SELECT subject_name,subject_id,status FROM subjects WHERE   level='elementary' "; 

    $connect = mysql_query($select_subjects_elem) or die(mysql_error());
    $data[]=array();

    while($row = mysql_fetch_array($connect)){
        $data= array(
            'subj_name' =>$row['subject_name'], 
            'subj_id'=>$row['subject_id'],
            'subj_status'=>$row['status'],
            );
    }

    echo json_encode($data);
}
?>

私は各tdをhtmlの異なる行に切り刻み、それを+ =と連結しましたが、なぜそれが未定義を返すのか理解できません。私はそれをfirebugでチェックしましたが、コンソールはすべての結果を繰り返し処理しますが、1行のデータしか返しません。

4

2 に答える 2

2

whileループでは、配列に追加するのではなく配列全体を上書きするため、1行しか取得できません。配列宣言を次のように変更します。

    $data = array();

およびループ内のコード:

    $data[] = array(
        'subj_name' =>$row['subject_name'], 
        'subj_id'=>$row['subject_id'],
        'subj_status'=>$row['status'],
    );
于 2012-11-27T07:11:20.123 に答える
0

このコードを試してください、

function get_elementary_subjects(){

    $select_subjects_elem = "SELECT subject_name,subject_id,status FROM subjects WHERE   level='elementary' "; 

    $connect = mysql_query($select_subjects_elem) or die(mysql_error());

    $data = array(); //<---changed $data[] to $data

    while($row = mysql_fetch_array($connect)){

        //change $data to $data[] 
        $data[] = array(
            'subj_name' =>$row['subject_name'], 
            'subj_id'=>$row['subject_id'],
            'subj_status'=>$row['status']  //<---removed comma here

        );
    }

    echo json_encode($data);
    exit; //<---Added exit here
}

上記のコードの私のコメントを参照してください

于 2012-11-27T07:12:49.023 に答える