Ответ Ajax не работает в 10% случаев - PullRequest
2 голосов
/ 04 июля 2011

Моя проблема в том, что работает почти 90% времени, но не работает 10%.Я просто ничего не получаю.Он использует раскрывающийся список с событием onChange.

<script type="text/javascript">
function showCourse(str)
{
    if (str=="")
    {
        document.getElementById("txtHint").innerHTML="";
        return;
    }  

    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("txtHint").innerHTML=xmlhttp.responseText;
        }
    }

    xmlhttp.open("GET","getcourse.php?q="+str,true);
    xmlhttp.send();
}
</script>



      <div>
        <label for="department">Department</label>

        <select name="departments" onchange="showCourse(this.value)">
            <option>Select a department:</option>
            <?php
            for ($i = 0; $i < sizeof($mySchool->departments); $i++) {

                echo "<option value=\"" . $mySchool->departments[$i]->id . "\">" .                      $mySchool->departments[$i]->title . "</option>\n  ";
            }
            ?>
        </select>
        <span id="departInfo">Choose from the following.</span>

    </div>
    <div id="txtHint"></div>

Затем, наконец, вот что ajax вызывает в getcourse.php

 <?php
 require_once('auth.php');

 $q = $_GET["q"];

 $sql = "SELECT * FROM courses WHERE department_id = '" . $q . "'";

 $result = mysql_query($sql);

 echo "<table border='1' width='600'>
 <tr>
 <th>Link</th>
 <th>Section</th>
 <th>Name</th>
 <th>Map ID: </th>
 </tr>";


 while ($row = mysql_fetch_array($result)) {

     echo "<tr>";
     echo "<td>" . $row['link'] . "</td>";
     echo "<td>" . $row['section'] . "</td>";
     echo "<td>" . $row['name'] . "</td>";
     echo "<td>" . $row['map'] . "</td>";
     echo "</tr>";

    }
    echo "</table>";
  ?>

1 Ответ

5 голосов
/ 04 июля 2011

Более новые версии (8+, я думаю) MISE кэшируют ответы AJAX. Удивительно, но факт. Вы не можете обмануть MSIE, установив no-cache или подобные заголовки, MSIE лучше знает, какие случаи должны кэшироваться в ответах AJAX (ребята из MS думают: всегда), поэтому лучше всего использовать уникальные URL, говорят:

xmlhttp.open("GET","getcourse.php?q=" + str + "&rnd=" + (+new Date()),true);

(Личное примечание: на моем Linux установлены Firefox, Chrome, Opera, MSIE6 (!), И я протестировал свое приложение со всеми этими браузерами - вы можете себе представить, что это было таким сюрпризом, когда пользователь сказал, что он не работает на его компьютере, появляется начальный экран, но дальнейшие изменения не отображаются. Мне пришлось одолжить ноутбук с Windows у одного из моих друзей.)

...