使用AJAX从SQL查询显示多个记录

时间:2011-01-05 18:19:22

标签: php javascript sql ajax json

这是我第一次尝试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查询结果并将它们放入名为$ row的PHP数组变量中完美无缺。我遇到的问题是如何格式化然后显示数据。

我给出的选项
A.有些地方告诉我在PHP循环中运行$ row并使用所需的HTML代码格式化结果(就像我在AJAX尝试之前所做的那样),然后将所有代码传递到主页并使用JS来显示该数据 B.其他地方告诉我使用json_encode($ row)将$ row转换为JS数组,然后将其传递给主页并使用JS格式化具有所需HTML的数据并显示它。这是我第一次听说过JSON。正如您在上面的示例中所看到的,这是我上次尝试的选项。

我对选项A的问题是,我可能对JS非常生疏,但是一旦将变量设置为AJAX响应,我会做一些document.write(ajaxRequest.responseText);并且只显示从PHP页面检索到的HTML代码。

我对选项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 个答案:

答案 0 :(得分:1)

既然你说使用Javascript生锈了,你可以使用选项B,但是我没有说明为什么你需要将数据转换为json。

但是,如果您可以花一些时间,我认为这是考虑使用jquery(当然是一些javascript技能)的最佳机会。您可以在PHP中保留json格式,然后使用jquery模板。 请查看以下网址:http://api.jquery.com/jQuery.template/