这是我第一次尝试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++;
}
?>
答案 0 :(得分:1)
既然你说使用Javascript生锈了,你可以使用选项B,但是我没有说明为什么你需要将数据转换为json。
但是,如果您可以花一些时间,我认为这是考虑使用jquery(当然是一些javascript技能)的最佳机会。您可以在PHP中保留json格式,然后使用jquery模板。 请查看以下网址:http://api.jquery.com/jQuery.template/