Aco
Новичок
AJAX: проблема с получением ответа
Всем привет.
Проблема в том, что после запроса на ajax в логах апача видно что php-скрипт отправил ответ(и действительно он отлично работает), а вот ajax первый запрос срабатывает, а на второй ни как не реагирует. Как проверка выявила что в аванте он не выдаёт ответ ибо readyState = 0 в опере readyState = 1, и больше readyState не меняетя.
Сами скрипты:
Делается локальный поисковик по шарам.
Имеется база данных с файлами и папками.
И так. Клиент запрашивает папки и файлы с определённым названием(жмёт на главной "поиск")
Грузится php-страничка с таблицами
...
<table width="100%" style="border:1px solid #CCCCCC">
<tr><td id="folders"></td></tr></table>
<font size='-3'><br></font>
<table width="100%" style="border:1px solid #CCCCCC">
<tr><td id="files"></td></tr></table>
...
где ajax заполняет ячейки с id="folders" все найденные папки,а id="files" - файлы.
При onLoad вызывается startUp(), где сами запросы ajax
В вот в чем проблема:
При запросе, папки он выводит исправно а вот на файлах повисает, alert сообщает что в аванте readyState = 0 в опере readyState = 1, и больше readyState не меняетя, хотя апач отослал верный ответ.
Причем если не делать авто запуск file() с помощю folder(), а вручную то оба ответа отображаются.
Надеюсь проблема понятна...
-~{}~ 24.11.06 15:09:
Или ещё проще: с какого может быть, точнее не быть readyState равным 4 если ответ на запрос пришёл?
Всем привет.
Проблема в том, что после запроса на ajax в логах апача видно что php-скрипт отправил ответ(и действительно он отлично работает), а вот ajax первый запрос срабатывает, а на второй ни как не реагирует. Как проверка выявила что в аванте он не выдаёт ответ ибо readyState = 0 в опере readyState = 1, и больше readyState не меняетя.
Сами скрипты:
Делается локальный поисковик по шарам.
Имеется база данных с файлами и папками.
И так. Клиент запрашивает папки и файлы с определённым названием(жмёт на главной "поиск")
Грузится php-страничка с таблицами
...
<table width="100%" style="border:1px solid #CCCCCC">
<tr><td id="folders"></td></tr></table>
<font size='-3'><br></font>
<table width="100%" style="border:1px solid #CCCCCC">
<tr><td id="files"></td></tr></table>
...
где ajax заполняет ячейки с id="folders" все найденные папки,а id="files" - файлы.
При onLoad вызывается startUp(), где сами запросы ajax
PHP:
<script> // описан в <head>
<? echo "var req = '".urlencode($request)."';\n"; ?> //наш запрос
function startUp()
{
try {
request = new XMLHttpRequest();
} catch (trymicrosoft) {
try {
request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (othermicrosoft) {
try {
request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (failed) {
request = false;
}
}
}
if(!request)
{
alert("Error initial Ajax");
return;
}
folder(); //функция, запрашивающая все запрашиваемые папки у сервера, записывающая их в таблицу с id="folders" и при получении ответа вызывает функцию file(), аналогичную folder() только для файлов.
}
function folder()
{
if(!request)
return;
var url = "Find.php?request="+ req + "&where=folder";//req - название искомых папок и файлов данные пользователем.
request.onreadystatechange = showFolders;
request.open("GET", url, true);
request.send(null);
document.getElementById('folders').innerHTML = "<div align='center' class='std'><br>Поиск среди папок ...<br><br></div>";
}
function showFolders()
{
if (request.readyState == 4)
{
if (request.status == 200)
document.getElementById('folders').innerHTML = request.responseText;
else
alert("Ошибочка вышла - " + request.status );
}
}
function file()
{
if(!request)
return;
var url = "Find.php?request="+ req +"&where=file&inc="+inc;
request.open("GET", url, true);
request.onreadystatechange = showFiles;
request.send(null);
document.getElementById('files').innerHTML = "<div align='center' class='std'><br>Поиск среди файлов ...<br><br></div>";
}
function showFiles()
{
if (request.readyState == 4)
{
if (request.status == 200)
document.getElementById('files').innerHTML = request.responseText;
else
alert("Ошибочка вышла - " + request.status );
}
}
</script>
Сам PHP-скрипт прост:
<?
//запрос у бд и заполние ответами переменную $answer - всё исправно работает
header("Content-type: text/html; charset=utf-8");
header("Cache-Control: no-cache, must-revalidate");
echo $answer;
?>
При запросе, папки он выводит исправно а вот на файлах повисает, alert сообщает что в аванте readyState = 0 в опере readyState = 1, и больше readyState не меняетя, хотя апач отослал верный ответ.
Причем если не делать авто запуск file() с помощю folder(), а вручную то оба ответа отображаются.
Надеюсь проблема понятна...
-~{}~ 24.11.06 15:09:
Или ещё проще: с какого может быть, точнее не быть readyState равным 4 если ответ на запрос пришёл?