AJAX обновляет БД, но не заменяет <div> - PullRequest
0 голосов
/ 23 марта 2011

Так близко, но так далеко. Существует таблица, в которой отображается состояние заявки на участие в неисправности (отправлено, открыто, закрыто), когда щелкается идентификатор заявки, отображается дополнительная информация и дается кнопка для открытия заявки или ее закрытия. У кнопки есть событие onClick, которое отправляет AJAX на работу, и кнопка работает, пока не обновляется статус заявки. Тем не менее, после обновления в таблице отображения, которая показывает, статус также должен обновляться, но не обновляется.

Кнопка:

            if ($ticketarray['status'] == "0") {
                // print option to open ticket
                echo "<form>";
                echo "<input type=\"button\" name=\"". $ticketarray['id'] ."\" value=\"Open Ticket\" onClick=\"statusChange(". $ticketarray['id'] .")\" />";
                echo "</form>";
            }
            if ($ticketarray['status'] == "1") {
                // print option to close ticket
                echo "<form>";
                echo "<input type=\"button\" name=\"". $ticketarray['id'] ."\" value=\"Close Ticket\" onClick=\"statusChange(". $ticketarray['id'] .")\" />";
                echo "</form>";
            }

Таблица:

echo "<td name=\"statusholder\" style=\"padding: 0px;margin: 0px;\" /><div style=\"font-color: ". $fontcolor .";font-weight: bold;background-color: ". $statuscolor .";text-align: center;width: 100%;height: 100%;visibility: visible;\" name=\"statusdiv\">". statusTranslator($tixarray['status']) ."</div></td>";

AJAX:

 function statusChange(str) {
  if (window.XMLHttpRequest) {
    // code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
  }
  else {
      // code for IE6, IE5
      xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  xmlhttp.onreadystatechange=function() {

     if (xmlhttp.readyState==4 && xmlhttp.status==200) {
        document.getElementById('statusdiv').style.visibility = hidden;
        document.getElementById('statusholder').innerHTML=xmlhttp.responseText;
     }
  }
xmlhttp.open("GET","statuschange.php?id="+str,true);
xmlhttp.send();
}

STATUSCHANGE.PHP:

    <?
include("./header.php");

if (isset($_GET['id'])) {
    // valid request, get current status
    $currentstatus = mysql_query("SELECT status FROM `table` WHERE id='". mysql_real_escape_string($_GET['id']) ."'") or die("Cannot get current ticket status ". mysql_error());
    $currentarray = mysql_fetch_assoc($currentstatus) or die("cannot make array ". mysql_error());
    if ($currentarray['status'] == "0") {
        // currently Submitted, make Open
        mysql_query("UPDATE `table` SET status='1' WHERE id='". mysql_real_escape_string($_GET['id']) ."'") or die("cannot update status ". mysql_error());
        // send reformatted status div
        echo "<div style=\"font-color: #000;font-weight: bold;background-color: #FFFF00;text-align: center;width: 100%;height: 100%;\" name=\"statusdiv_updated\">Open</div>";
    }
    if ($currentarray['status'] == "1") {
        // currently Submitted, make Open
        mysql_query("UPDATE `table` SET status='2' WHERE id='". mysql_real_escape_string($_GET['id']) ."'") or die("cannot update status ". mysql_error());
        // send reformatted status div
        echo "<div style=\"font-color: #000;font-weight: bold;background-color: #33CC00;text-align: center;width: 100%;height: 100%;\" name=\"statusdiv_updated\">Completed (Closed)</div>";
    }
} else {
    echo "nothing to do here";
}
?>

1 Ответ

2 голосов
/ 23 марта 2011

В этой строке

if (xmlhttp.readyState==4 && xmlhttp.status==200) {

удалите

 && xmlhttp.status==200

, и все должно работать нормально: -)

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