2013-03-24 52 views
0

我现在有一个功能,看起来像这样:返回通过AJAX一系列复杂的命令(或者重组一次通过Ajax返回)

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)); 
} 

这......这类作品。至少也就是说它将数据返回到一个丑陋的大块中。

的事情是我不能再操纵它,因为我做了如上前:

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进行更正,以便在页面上自动工作而无需重写信息是通过ajax拉回来的?

回答

1

首先,使用json_encode($ data)就足够了,您将从AJAX获取数组。

其次,检查它与萤火虫,因为你应该得到结构化的数据,而不是大块。

警报()只是试图打印一切为单个字符串,这是所有

for(var i = 0; i < html.length; i++) 
    // do something with html[i] 
+0

哦~~! 当然。谢谢。这一手固定了我所有的问题。 – 2013-03-25 00:05:31