0

私は現在、次のような関数を持っています:

function getEvents($weekNumStart, $weekNumEnd){
    $mysqli = new mysqli(DB_SERVER, DB_USER, DB_PASSWORD, DB_NAME);
    if (!$mysqli) {
        die('There was a problem connecting to the database.');
    }
    else {
        if ($weekNumEnd == '') {
            $weekNumEnd = $weekNumStart;
        }
        $Group = $_SESSION['Group'];
        $query = $mysqli->prepare("SELECT EventID, DAYOFWEEK(Start) AS wday, Events.Start, HOUR(Start) AS sHour, HOUR(End) AS eHour, Events.End, Events.Group, Events.Unit, Type, Room, Lecturer, Cancelled, StartName FROM Events, Week WHERE StartName >= '$weekNumStart' AND StartName <= '$weekNumEnd' AND Events.Start >= StartWeek AND Events.Start <=EndWeek AND (Events.Group = '$Group' OR Events.Group = '');");
        $query->execute();
        $query->bind_result($eventID, $dayofweek, $startDateTime, $startHour, $endHour, $endDateTime, $group, $unit, $type, $room, $lecturer, $cancelled, $weekName);
        $data_arr = array();
        while ($query->fetch()){
            $data_arr[] = array(
               $eventID, $dayofweek, $startDateTime, $startHour, $endHour, $endDateTime, $group, $unit, $type, $room, $lecturer, $cancelled, $weekName
            );
        }
        return $data_arr; //
    }
    $mysqli->close();
}

この関数は、私が望むように機能します。私は現在それを次のように操作しています:

if (!isset($weekNumEnd)){
        $weekNumEnd = '';
    }
    $data = getEvents($weekNumStart, $weekNumEnd);
    foreach($data as $day) {
        for($i=0;$i<7;$i++){
            for($j=9;$j<=18;$j++){
                if ($day[1] == $i && $day[3] == $j){
                    $unit = $day[7];
                    $type = $day[8];
                    $room = $day[9];
                    if ($i == 2){
                    ?>
                    <script>
                    var mon<?=$j?>unit = '<?=$unit?>';
                    var mon<?=$j?>type = '<?=$type?>';
                    var mon<?=$j?>room = '<?=$room?>';
                    $('#mon-<?=$j?>').append(
                        "<p>"+mon<?=$j?>unit+"<br>"+mon<?=$j?>type+"<br>"+mon<?=$j?>room+"</p>"
                    );
                    </script>
                    <?php
                    if (($day[4] - $day[3]) > 1) {
                        for($q=($day[3]+1);$q<$day[4];$q++){
                        ?>
                        <script>
                            var mon<?=$q?>unit = '<?=$unit?>';
                            var mon<?=$q?>type = '<?=$type?>';
                            var mon<?=$q?>room = '<?=$room?>';
                            $('#mon-<?=$q?>').append(
                                "<p>"+mon<?=$q?>unit+"<br>"+mon<?=$q?>type+"<br>"+mon<?=$q?>room+"</p>"
                            );
                        </script>
                        <?php
                        }
                    }
                }

問題は。明らかに、リアルタイムで実行して、週などが変更されるたびにイベントリストを常に更新することはできません。

そこで、それを修正するために、Ajaxを使用してみることにしました。これまでのところ私はこれを持っています:

function getEvents() {
        var data = 'Events=Yes';
        $.ajax({
            type: "POST",
            url: "functions/updateWeek.php", 
            data: data,
            cache: false,
            dataType: 'json',
            success: function(html) {
                    alert(html.returned_val);
            }
    });
}

そして、私はこれを返す必要があります:

if($_POST['Events'] == "Yes"){
    $weekNumStart = $_SESSION['startWeek'];
    $weekNumEnd = $_SESSION['endWeek'];
    $data = getEvents($weekNumStart, $weekNumEnd);
    echo json_encode(array('returned_val' => $data));
}

そして、これは...一種の作品です。少なくとも、それは1つの醜い大きなチャンクでデータを返すということです。

問題は、上記のように以前のように操作できなくなったことです。

data = getEvents($weekNumStart, $weekNumEnd);
    foreach($data as $day) {
        for($i=0;$i<7;$i++){
            for($j=9;$j<=18;$j++){
                if ($day[1] == $i && $day[3] == $j){
                    $unit = $day[7];
                    $type = $day[8];
                    $room = $day[9];
                    if ($i == 2){
                    ?>
                    <script>
                    var mon<?=$j?>unit = '<?=$unit?>';
                    var mon<?=$j?>type = '<?=$type?>';
                    var mon<?=$j?>room = '<?=$room?>';
                    $('#mon-<?=$j?>').append(
                        "<p>"+mon<?=$j?>unit+"<br>"+mon<?=$j?>type+"<br>"+mon<?=$j?>room+"</p>"
                    );
                    </script>

つまり、ajaxを介して情報をコールバックしたときに、それを再操作する方法がわかりません。上記のすべてを完全にJavaScript形式で書き直しますか?私が知らない/理解していない、これを行うためのより論理的な方法はありますか?または、そのコードを(phpとjavascriptを使用して)別のウィンドウで機能させ、すべてを返送してajaxを介して修正し、情報を一度書き直さなくてもページで自動的に機能するようにする方法はありますか? ajaxを介して引き戻されますか?

4

1 に答える 1

1

まず、json_encode($ data)を使用するだけで十分であり、AJAXから配列を取得します。

次に、大きなチャンクではなく構造化データを取得する必要があるため、Firebugで確認してください。

alert()は、すべてを1つの文字列として出力しようとするだけで、それだけです。

for( var i = 0; i < html.length; i++ )
    // do something with html[i]
于 2013-03-24T23:50:44.743 に答える