Это моя первая попытка 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++;
}
?>