Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ajax. Статус ответа, Маленький вопрос 
V
    Опции темы
tikitiki
Дата 13.1.2009, 03:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Извиняюсь. небольшой вопрос. У меня заложена в коде проверка статуса и выдаётся сообщение, что статус равен нулю. Т.е. если статус ответа равен 200, то выполняем какие-то действия, а иначе-выводим чему равен статус. Вот мне и выводит, что статус равен нулю. Как мне это расценивать? Куда копать? Вот код:
Код

if(request.readyState == 4){
          
           if(request.status == 200){
              var otvet=request.responseText;
          alert(otvet); 
          var div=document.createElement('div'); div.innerHTML=otvet; 
         
          var ajaxDivDva=document.getElementById("ajax"); 
          while(ajaxDivDva.hasChildNodes()){
          var firstChild=ajaxDivDva.firstChild;
          ajaxDivDva.removeChild(firstChild);
          }
              ajaxDivDva.appendChild(div);
           }
       else
       alert("Error! Request status is "+request.status);
    }

Это означает, что возвращаемый ответ сервера php скриптом какой-то не нормальный вид имеет? Не данные и html возвращает ожидаемые? Или это значит может, что этот скрипт ничего не возвращает? Или это ещё какая-то ошибка? Я сам немного запутался в поиске ошибки. Проверял код-особо ничего странного не нахожу.
Благодарю заранее за помощь. 



--------------------
PM   Вверх
tikitiki
Дата 13.1.2009, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Буду рад любым предложениям. Т.к. в коде не нахожу никаких ошибок. Проверял в firefox последней версии-ошибка в нём выскакивает.


--------------------
PM   Вверх
ksnk
Дата 13.1.2009, 19:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



а сам request куда-нибудь посылался?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
tikitiki
Дата 13.1.2009, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



ksnk, вот как запрос отправляется.
Код

createRequest();
if(!request){alert("Request not created");return false;}
            
                    request.open("GET", url, true);
                        request.onreadystatechange=updatepage;
                    request.send(null);

Вот это функция, формирующая объект запроса.
Код

function createRequest(){
        
    try{
       request=new XMLHttpRequest();
    {rdelim} catch (trymicrosoft){
    try{
       request=new ActiveXObject("Msxml2.XMLXTTP");
    } catch (othermicrosoft){
        try{
       request=new ActiveXObject("Microsoft.XMLXTTP");
    } catch (failed){
       request=null;
    } 
    } 
    } 
    if(request==null)
          alert("Error creating XMLHttpRequest!");
    
}

В первом куске кода или где-то пробовал менять условие перед алерт. Выдало сообщение. Сделал вывод, что request скорее всего создался.

Добавлено через 5 минут и 58 секунд
ksnk, я забыл сказать. Запрос отправляется. request.readyState == 4 это условие не выполнилось бы (а оно выполнилось, если посмотреть в самом начале поста и самый верхний кусок кода) видимо без отправки запроса.


--------------------
PM   Вверх
tikitiki
Дата 15.1.2009, 00:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Ещё хочу сказать. Сразу не сообразил спросить. Меня в данном вопросе с запросом больше всего смущает одна деталь: на некоторых сайтах пишут, что при создании запроса серверу в ajax надо делать задержки, например для того, чтоб пользователь не обновлял страницу раньше времени. 
Похоже ещё описывают какие-то задержки-не успел прочитать внимательно. Может я упустил какую-то задержку сделать для того, чтоб сервер успел отправить ответ в ajax? 
Но прошу учесть, что запрос у меня простой, обращается по-обычному к бд и просто требует вернуть данные из бд с html. Ничего сложного. Значит зачем задержки? Правильно я рассуждаю?


--------------------
PM   Вверх
ksnk
Дата 15.1.2009, 02:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



Не понял про задержки... тот кусок текста, котоый в первом посте находится в функции updatepage?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
tikitiki
Дата 15.1.2009, 04:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Цитата(ksnk @  15.1.2009,  07:14 Найти цитируемый пост)
тот кусок текста, котоый в первом посте находится в функции updatepage? 

Да. В самом верху.


Цитата(ksnk @  15.1.2009,  07:14 Найти цитируемый пост)
Не понял про задержки... 

Иногда создают на страницах с ajax такие штуки, которые пишут юзеру: "Подождите. Идёт загрузка". Скорее для того, чтоб он не обновлял раньше времени страницу и ничего вообще не трогал. Видимо подразумевается здесь, что и обработчики все ajax загрузиться бы должны успеть, т.к. они загружаются обычно на onload в body, т.е. только когда вся страница загрузится. 

Я и подумал-может у меня что-то подобное происходит и как-то не успевает ответ сервера прийти и его надо как-то подождать. Хотя нелепое предположение вообще по смыслу )

А вообще где ошибка никак понять не могу до сих пор.


--------------------
PM   Вверх
tikitiki
Дата 19.1.2009, 01:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Оказывается я  с ajax не всё понял. Вот здесь тест я проделал. И есть кое-какие результаты. Тест делает почти то, что я хотел, но не совсем. И кроме того есть странности, от которых я не могу избавиться. Я хотел, чтоб на странице была одна ссылка, при клике на которую выводилось приветствие на англ. от ajax в окне через алерт и это приветствие замещало ссылку на странице. Серверный скрипт делает только то, что выводит это приветствие. Местами я для проверки выводил некоторые значения с помощью алерт.
Вот первый скрипт index.php. В нём идёт основная работа.
Код

<?php
print "<html>
<head><title>Ajax >> Òåñò</title>
<!-- include css -->
<link rel=\"stylesheet\" type=\"text/css\" href=\"css/style.css\"></link>
<meta http-equiv=\"Content-Type\" content=\"text/html; charset=windows-1251\"></meta>
<script type=\"text/javascript\" language=\"Javascript1.2\">
<!--
var request=null;
function addOnClickHandlers(){
    var ajaxDiv=document.getElementById(\"ajax\"); 
    var ahrefs=ajaxDiv.getElementsByTagName(\"a\"); 
        for (var i=0;i<=ahrefs.length;i++){
            ahrefs[i].onclick=function clickAhrefs(){
                        var aHref=this.toString(); 
                        var stringmy=aHref.substring(0,26)+\"twoindex.php?\";
            var url=stringmy+\"dummy=\"+new Date().getTime();
            alert (url);
                    createRequest();
            if(request==null){alert(\"Request not created\");return false;}
            
                    request.open(\"GET\", url, true);
                        request.onreadystatechange=updatepage;
                    request.send(null);
                    
    
    
                        };
            return false; 

        }
}
function createRequest(){
        
    try{
       request=new XMLHttpRequest();
    } catch (trymicrosoft){
    try{
       request=new ActiveXObject(\"Msxml2.XMLXTTP\");
    } catch (othermicrosoft){
        try{
       request=new ActiveXObject(\"Microsoft.XMLXTTP\");
    } catch (failed){
       request=null;
    } 
    } 
    } 
    if(request==null)
          alert(\"Error creating XMLHttpRequest!\");
    
}

function updatepage(){
        if(request!=null)alert('request opened');
        
        if(request.readyState == 4 && request.status == 200){
          
           
              var otvet=request.responseText;
              alert(otvet);
          var div=document.createElement(\"div\"); div.innerHTML=otvet; 
         
          var ajaxDivDva=document.getElementById(\"ajax\");
          if(ajaxDivDva!=null){
             if(ajaxDivDva.childNodes){
            for(var i=0; i<ajaxDivDva.childNodes.length; i++){
               var childNode=ajaxDivDva.childNodes[i];
                       ajaxDivDva.removeChild(childNode);
            }
         }
          }
          
              ajaxDivDva.appendChild(div);return;
          
       
    }
else
       alert(\"Error! Request status is \"+request.status +\"and request readyState\"+request.readyState);

    
}
//-->
</SCRIPT>
</head>
<body onload=\"addOnClickHandlers();\">
<div id=\"ajax\"><a href=\"index.php\">Òåñò</a></div>
</body>
</html>";
?>

Вот второй скрипт twoindex.php. Он находится в той же папке локально с первым скриптом. Это можно сказать скрипт на серверной стороне.
Код

<?php
print "Hello from ajax!!!";
?>

Когда я в онлайн запустил, то получил такие ответы последовательно:
Код

http://localhost/ajaxtest/twoindex.php?dummy=1232316525016
request opened
Error! Request status is 200and request readyState2
request opened
Error! Request status is 200and request readyState3
request opened
Hello from ajax!!!
Hello from ajax!!! (приветствие появилось на странице заместив собой ссылку)
request opened
Hello from ajax!!!

И в самом конце появляется опять сама ссылка, что я не ожидал и понять не могу. Тестировал несколько раз. Ответы такие же точно повторяются. В начале тестов всегда страницу index.php обновлял. 
Здесь с одной стороны многое понятно. Но не ясно почему сообщения "request opened" и "Hello from ajax!!!" два раза повторяются. Должны один раз. Ссылка в конце появляется как я сказал-тоже непонятно. В целом почти нормально и казалось бы надо для полностью нормальной работы скрипта просто поубирать вывод тестовых сообщений (алертов), но когда я убираю из кода строку
Код

if(request!=null)alert('request opened');

, то работа теста портится и он выдаёт только сообщения 
Код

http://localhost/ajaxtest/twoindex.php?dummy=1232317456312
Error! Request status is 0and request readyState4

После опять появляется ссылка. При этом судя по сообщениям ответ сервера сильно искажается, т.е. нет приветствия от ajax и ошибки другие. Но что здесь с ответом происходит я на самом деле не знаю. Насчёт какое условие надо использовать для правильности на месте вот этого
Код

if(request.readyState == 4 && request.status == 200)

тоже никак не пойму. 
Меня интересует как правильно сделать данный тест, чтоб он просто делал то, что я хотел от него. Что я хотел от него-это я выше написал. Помогите разобраться, будьте так добры. 


--------------------
PM   Вверх
tikitiki
Дата 20.1.2009, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Проверил код, подобный последнему тесту, на хостинге. Проверял в файрфокс той же версии. Скрипт делает почти то, что нужно, но сейчас сообщения не выводятся вспомогательные тестовые с помощью алертов. Почему? непонятно. 
И самое главное - я не пойму теперь отправляются ли запросы серверу с помощью ajax на самом деле или нет. 
Дело в том, что у меня часть кода скрипта выполняет работу (вывод ссылок на странице) с помощью ajax, а часть - просто с помощью обычного php. Это происходит в одном скрипте. На странице, создаваемой этим скриптом, присутствуют в основном только ссылки, при кликах на которые должны выводиться другие ссылки с помощью ajax или php. Я пробовал разобраться где и что происходит. Разобрался, но все равно при работе скрипта сложно определить-то ли при кликах на ссылках выполняется запрос ajax, то ли обычный php.
Помогите хоть немного, кто знает что подсказать.



--------------------
PM   Вверх
12345c
Дата 21.1.2009, 15:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Круглый
****


Профиль
Группа: Vingrad developer
Сообщений: 2018
Регистрация: 26.12.2005
Где: наша не пропадала ?

Репутация: 57
Всего: 101



Цитата(tikitiki @  20.1.2009,  21:08 Найти цитируемый пост)
но все равно при работе скрипта сложно определить-то ли при кликах на ссылках выполняется запрос ajax, то ли обычный php
так элементарно в функцию onreadystatechange ставите счётчик или другой метод отслеживания срабатывания.

А со статусом =0 разобрались? У меня он появлялся, если УРЛ был локальным файлом.


--------------------
Google Code Playground - онлайн-отладка своих примеров HTML+JS без регистрации, с сохранением по URL, без кириллицы. Go
PM WWW   Вверх
tikitiki
Дата 21.1.2009, 20:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Цитата(12345c @  21.1.2009,  20:35 Найти цитируемый пост)
так элементарно в функцию onreadystatechange ставите счётчик или другой метод отслеживания срабатывания.

Хорошо. попробую.


Цитата(12345c @  21.1.2009,  20:35 Найти цитируемый пост)
А со статусом =0 разобрались? У меня он появлялся, если УРЛ был локальным файлом. 

У меня тоже появлялся, если урл был локальным. На хостинге не появляется. Но на хостинге вообще не выводит сообщений тестовых посредством алерт и приходится гадать почему они не выводятся. При чём не выводятся сообщения эти в разных местах. Впечатление, что вообще запрос ajax не формируется, не идёт на сервер и не возвращается. Но я сейчас кажись нашёл ошибку всего этого. Пока проверяю.



--------------------
PM   Вверх
tikitiki
Дата 21.1.2009, 21:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Теперь ошибки исправил. На самом деле в коде были ошибки значительные-не доглядел.

Нормально на хостинге работает. На onreadystatechange вешал алерт с сообщением обычным-работает. Но вот статус =0 всё равно выдаёт ошибку. И файрфокс при этом говорит об исключении и указывает на строку, которая должна вызывать сообщение об этой ошибке.
Таким образом я делаю вывод, что у меня статус =200 не настаёт никогда.  При статусе=200 я вывожу в коде сообщение тестовое, но оно не выводится. Что дальше делать-не пойму.


--------------------
PM   Вверх
tikitiki
Дата 21.1.2009, 22:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Инспектор DOM для firefox может помочь в этом вопросе? И как его поставить? Там же написано на сайте файрфокса официальном, что он не поддерживает номер версии последний.  


--------------------
PM   Вверх
tikitiki
Дата 21.1.2009, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



А ie теперь в отличие выдаёт ошибку создания объекта запроса
Код

Error creating XMLHttpRequest!

А это ещё почему такая ошибка?  smile Функция создания объекта запроса стандартна и должна на всех браузерах работать. Я выше приводил её код. 



--------------------
PM   Вверх
tikitiki
Дата 22.1.2009, 21:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 330
Регистрация: 10.5.2005

Репутация: нет
Всего: нет



Я кажется добился кое каких результатов. Заменил функцию создания объекта запроса на другую. И наконец дождался от сервера того ответа, что хотел.  smile Но только в ie6 и только когда поменял в функции, обновляющей страницу условие с 
Код

if(request.readyState == 4 && request.status==200)

на
Код

if(request.readyState == 4)

То же самое для firefox не проходит. Пустой ответ приходит от сервера. Даёт ошибку status=0 (а ie6 в данном случае выдает status=404). 
Пробовал методом тыка в firefox даже такое условие
Код

if(request.readyState == 4 && request.status==0)

При этом почти делается то, что нужно, но пустой ответ приходит от сервера (я ответ вывожу через алерт).
Вопрос: как в файрфокс 3.0.5 условие сделать, чтоб как в ie6 результат получился?


--------------------
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0633 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.