Отображение нескольких записей из SQL-запроса с использованием AJAX - PullRequest
0 голосов
/ 05 января 2011

Это моя первая попытка AJAX, и я столкнулся с тремя конкретными проблемами.Давайте работать по одному за раз.Вот первый ...

Итак, я создал PHP-управляемую веб-страницу, которая обращается к базе данных SQL и извлекает некоторые записи.Достаточно просто.Затем я хотел, чтобы страница была обновлена ​​с базой данных SQL без конечного пользователя, инициирующего событие, поэтому я просто настраивал обновление страницы каждые 3 секунды.Это простое исправление, но, очевидно, не очень сложная техника.Поэтому я предполагаю, что ответом является Ajax.

Поэтому я попытался использовать Ajax на странице.Первым делом нужно было добавить следующий код на главную страницу.Мы назовем его main.php

фрагмент main.php

<script language="Javascript" type="text/javascript">

var ajaxRequest;
function queueRefresh(){
  try{
    ajaxRequest = new XMLHttpRequest();
  } catch (e){
    try{
      ajaxRequest = new ActiveXObject("Msxml2.XMLHTTP");
    } catch (e) {
      try{
        ajaxRequest = new ActiveXObject("Microsoft.XMLHTTP");
      } catch (e){
        alert("This application requires an Ajax enabled brower.!");
        return false;
      }
    }
  }
  ajaxRequest.onreadystatechange = function(){
    if(ajaxRequest.readyState == 4){/
      document.write(ajaxRequest.responseText);
    }
  }
  ajaxRequest.open("GET", "queueRefresh.php?filter=<?php echo $filter; ?>", true);
  ajaxRequest.send(null);
}

</script>

Далее я создал новую страницу для кода, приведенного выше, для ссылки на queueRefresh.php ипереместил все мои SQL-запросы на эту страницу.Вот код для справки.(Пароль скрыт для безопасности.)

queueRefresh.php

  if(isset($_GET['filter']) AND $_GET['filter']<>"all"){
    $filter=$_GET['filter'];
  } else {
    $filter="";
  }

  $con=mysql_connect("localhost","cnsitq","********");
  if (!$con){
    die('Could not connect to database: ' . mysql_error());
  }
  mysql_select_db("cnsitq", $con); 

  if($filter<>""){
    $resultQueue=mysql_query("SELECT * FROM queuetest WHERE client = '$filter' AND (status = '2' OR status = '4')  ORDER BY client, site, status, mspadminready, mspready ASC");
  } else {
    $resultQueue=mysql_query("SELECT * FROM queuetest WHERE status = '2' OR status = '4' ORDER BY client, site, status, mspadminready, mspready ASC");
  }
  $row = mysql_fetch_array($resultQueue);
    echo json_encode($row);
    mysql_close($con);

?>

Теперь до этой части все работает без проблем при извлечении результатов моего запроса SQL и размещении их в массив PHPпеременная с именем $ row.У меня проблемы с тем, как отформатировать и затем отобразить эти данные.

Опции, которые я получил
A. Некоторые места говорят мне, чтобы я запускал $ row черезPHP-цикл while и отформатируйте результаты с нужным HTML-кодом (как я делал до попытки AJAX), затем передайте весь этот код на главную страницу и используйте JS для отображения этих данных.
B. Другие местаПриказывая мне использовать json_encode ($ row) для преобразования $ row в массив JS, а затем передать его на главную страницу и использовать JS для форматирования данных с нужным HTML и отображения их.Это первый раз, когда я услышал о JSON.Как вы можете видеть в приведенном выше примере, это вариант, который я пытался выполнить в последний раз.

Проблема, с которой я столкнулся при использовании опции A, заключается в том, что, возможно, я очень ржавый с JS, но как только переменная установленак ответу AJAX я делаю небольшой document.write (ajaxRequest.responseText);и отображается ТОЛЬКО HTML-код, полученный со страницы PHP.

Проблема, с которой я столкнулся при использовании опции B, заключается в преобразовании массива JSON обратно в «пригодные для использования» данные, которые я затем могу соответствующим образом отформатировать.

Если это поможет, вот код форматирования.

<?php
  $i="0";
  $prevClient="";
  while($row = mysql_fetch_array($resultQueue)){
    $client=$row['client'];
    $site=$row['site'];
    if($row['status']=="2"){
      $status="MSP";
    } elseif($row['status']=="4"){
      $status="MSPAdmin";
    }
  $tech=$row['tech'];
  if($row['status']=="2"){
    $hour=substr($row['mspready'],0,-6);
    $minute=substr($row['mspready'],3,2);
    $suffix="AM";
    if($hour>="12"){
      $suffix="PM";
      if($hour>"12"){
        $hour=$hour-12;
      }
    }
    $timestamp=$hour . ":" . $minute . " " . $suffix;
  } elseif($row['status']=="4"){
    $hour=substr($row['mspadminready'],0,-6);
    $minute=substr($row['mspadminready'],3,2);
    $suffix="AM";
    if($hour>="12"){
      $suffix="PM";
      if($hour>"12"){
        $hour=$hour-12;
      }
    }
    $timestamp=$hour . ":" . $minute . " " . $suffix;
  }
  $phone=$row['phone'];
  $locked=$row['locked'];
  if($client<>$prevClient){
    if($prevClient<>""){
      echo "  <tr>
      <td colspan=\"3\"><i m g height=\"10\" src=\"images/spacer.gif\" width=\"10\" /></td>
      </tr>";
    }
    echo "  <tr>
    <td colspan=\"3\" class=\"headerClient\">" . $client . "</td>
    </tr>";
  }
  if($i & 1){
    echo "  <tr class=\"bodyText tableZebraDark bold\">";
  } else {
    echo "  <tr class=\"bodyText tableZebraLight bold\">";
  }
  echo " <td width=\"25%\">" . $site . "</td>
  <td align=\"center\" width=\"37%\">" . $status . "</td>
  <td align=\"right\" width=\"38%\">" . $tech . "</td>
  </tr>";
  if($i & 1){
    echo "<tr class=\"bodyText tableZebraDark\">";
  } else {
    echo "  <tr class=\"bodyText tableZebraLight\">";
  }
  echo " <td width=\"25%\">";
  if($authentication=="valid"){
    if($locked==""){
      echo "<i m g title=\"You are authorized to update this site.\" height=\"10\" src=\"images/edit.gif\" width=\"10\" />";
    } else {
      echo "<i m g title=\"Someone is already updating this site.  Try again in a moment.\" height=\"10\" src=\"images/locked.png\" width=\"10\" />";
    }
  } else {
    echo "<i m g height=\"10\" src=\"images/spacer.gif\" width=\"10\" />";
  }
  if($notes==""){
    echo "<i m g height=\"10\" src=\"images/spacer.gif\" width=\"10\" />";
  } else {
    echo "<i m g title=\"" . $notes . "\" height=\"10\" src=\"images/notes.jpg\" width=\"10\" />";
  }
  echo"</td>
  <td align=\"center\" width=\"37%\">" . $timestamp . "</td>
  <td align=\"right\" width=\"38%\">" . $phone . "</td>
  </tr>";
  $prevClient=$client;
  $i++;
}
    ?>

1 Ответ

1 голос
/ 05 января 2011

Поскольку вы сказали, что вы являетесь пользователем Rusty с Javascript, вы можете использовать вариант B, однако я не понимаю, зачем вам нужно конвертировать данные в json.

Однако я думаю, что это лучший шансРассмотрите возможность использования jquery (конечно, некоторые навыки JavaScript), если вы можете потратить некоторое время.Вы можете сохранить формат json в PHP, а затем использовать шаблонизатор jquery.Проверьте этот URL: http://api.jquery.com/jQuery.template/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...