Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

HTML+CSS+JavaScript

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: onreadystatechange, readyState и status в АЯКСЕ
 
 автор: 1999   (23.08.2006 в 13:18)   письмо автору
 
 

1) что обозначает onreadystatechange?
2) readyState м.б. равен только 4. Почему?
3) status м.б. равен 200, 404 и еще чему-то. Что обозначают эти цифры?
Конкретно код:

function sendcom(id,name,email,homepage,text)
{
  ajax_724.open("GET","http://akira.spb.su/mod/comment/get.php",true);
  ajax_724.onreadystatechange=function() {
  if (ajax_724.readyState==4) {
     if (ajax_724.status==200) {
    document.getElementById('comments_'+id).innerHTML=ajax_724.responseText
     } else if (ajax_724.status==404) {
    document.getElementById('comments_'+id).innerHTML='Error 404 - File not found !'
     } else {
    document.getElementById('comments_'+id).innerHTML='HTTP Status '+ajax_724.status+' !'
     }
  }

   
 
 автор: coloboc66   (23.08.2006 в 13:39)   письмо автору
 
   для: 1999   (23.08.2006 в 13:18)
 

200 - ОК, 404- страница не найдена. Это стандартные коды ошибок сервера. onreadystatechange- обработчик события, событие возникает при смене свойства readyState ActiveX-объекта. 4- объект создан и загружен (выполнено). Может быть также 0,1,2, и 3.
Кажись- так.

   
 
 автор: 1999   (23.08.2006 в 14:24)   письмо автору
 
   для: coloboc66   (23.08.2006 в 13:39)
 

а что значат 0, 1, 2 и 3?

   
 
 автор: coloboc66   (23.08.2006 в 14:48)   письмо автору
 
   для: 1999   (23.08.2006 в 14:24)
 

0 = неинициализирован (uninitialized); 1 = «идет загрузка» (loading); 2 = «загружен» (loaded); 3 = «интерактивен» (interactive) 4 = «выполнен» (complete)

   
 
 автор: 1999   (23.08.2006 в 14:59)   письмо автору
 
   для: coloboc66   (23.08.2006 в 14:48)
 

ага ясна
а у метода open (ajax.open) какие параметры?
1 - наверно метод? (хотя как может быть метод POST)
2 - адрес. тут все понятно
3 - ???

   
 
 автор: coloboc66   (23.08.2006 в 15:19)   письмо автору
 
   для: 1999   (23.08.2006 в 14:59)
 


open(<method>, <URL> [, <asyncFlag>[, <userName>[, <password>]]])

Последние три необязательны.

   
 
 автор: 1999   (23.08.2006 в 16:19)   письмо автору
 
   для: coloboc66   (23.08.2006 в 15:19)
 

можно вопрос - откуда вы это все берете?

   
 
 автор: coloboc66   (23.08.2006 в 16:41)   письмо автору
 
   для: 1999   (23.08.2006 в 16:19)
 

Набираешь в Гугле, например: "методы свойства AJAX" и шерстишь по ссылкам. Способ очень удобен при халявном инете. Но и при платном полезные страницы можно сохранять на диск. Самое главное в Гугле хорошо сформировать запрос. Я смотрю- вы взяли пример Акиры- не советую. Он пользуется прототипом, а это довольно сложно для понимания. Чистый Аякс намного проще и позволяет разобраться в сути вещей. А прототип- для продвинутых.

   
 
 автор: 1999   (23.08.2006 в 17:17)   письмо автору
 
   для: coloboc66   (23.08.2006 в 16:41)
 

так это ведь и есть чистый аякс?
или может быть что-то проще

<script type="text/javascript">
var ajax;
try
{
  ajax = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e)
{
  try
  {
    ajax = new ActiveXObject("Microsoft.XMLHTTP")
  }
  catch (e)
  {
    ajax = false;
  }
}
else
{
  ajax = false;
}

if (!ajax && typeof XMLHttpRequest != 'undefined')
{
  try
  {
    ajax = new XMLHttpRequest();
  }
  catch (e)
  {
    ajax = false;
  }
}
</script>

??? - это ведь самое простое вроде)))
(до этого пользовался xajax'ом)

   
 
 автор: coloboc66   (23.08.2006 в 17:34)   письмо автору
 
   для: 1999   (23.08.2006 в 17:17)
 

Это да. Но здесь только создание объекта АктивХ. А дальше надо писать свои функции. Акира использует для этого прототип. Прототип- это как бы класс Аякса с набором функций, облегчающих написание собственных (его можно скачать из сети). Во всяком случае, лично Я так понимаю ситуацию. Не знаю, как вам, а мне легче было написать пару своих функций, чем разбираться с этим прототипом. Кстати, вот эти
catch(e)
- это тоже ссылки на функции прототипа для обработки исключений. В чистом АЯКСЕ их нет.

   
 
 автор: 1999   (23.08.2006 в 17:40)   письмо автору
 
   для: coloboc66   (23.08.2006 в 17:34)
 

момент момент - а где он их использует?
хотите сказать, что ajax.open() - это не функция чистого аякса? но он же не сам ее писал?

   
 
 автор: coloboc66   (23.08.2006 в 17:51)   письмо автору
 
   для: 1999   (23.08.2006 в 17:40)
 

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

   
 
 автор: 1999   (23.08.2006 в 17:56)   письмо автору
 
   для: 1999   (23.08.2006 в 13:18)
 

собственно весь пример - взял с первой новости блога:

<script type="text/javascript">
var ajax;
try
{
  ajax = new ActiveXObject("Msxml2.XMLHTTP")
}
catch (e)
{
  try
  {
    ajax = new ActiveXObject("Microsoft.XMLHTTP")
  }
  catch (e)
  {
    ajax = false;
  }
}
else
{
  ajax = false;
}

if (!ajax && typeof XMLHttpRequest != 'undefined')
{
  try
  {
    ajax = new XMLHttpRequest();
  }
  catch (e)
  {
    ajax = false;
  }
}

function sendcom(id,name,email,homepage,text)
{
  ajax.open("GET","http://akira.spb.su/mod/comment/get.php",true);
  ajax.onreadystatechange=function()
  {
    if (ajax.readyState == 4)
    {
      if (ajax.status == 200)
      {
        document.getElementById('comments_'+id).innerHTML = ajax.responseText;
      }
      else if (ajax.status == 404)
      {
        document.getElementById('comments_'+id).innerHTML = "Error 404 - File not found!";
      }
      else
      {
        document.getElementById('comments_'+id).innerHTML = "HTTP Status " +ajax_724.status+ "!";
      }
    }
  }
}

ajax.setRequestHeader('ID',''+id+'')
ajax.setRequestHeader('NAME',''+name+'')
ajax.setRequestHeader('EMAIL',''+email+'')
ajax.setRequestHeader('HOMEPAGE',''+homepage+'')
ajax.setRequestHeader('TEXT',''+text+'')
ajax.send(null)
}
</script>

так выбираются комментарии к определенной записи в блоге. Вроде бы все просто.
А где же тот самый прототиповский файл?

   
 
 автор: coloboc66   (23.08.2006 в 18:01)   письмо автору
 
   для: 1999   (23.08.2006 в 17:56)
 

А этот пример работает у вас? Вы откуда код брали? Надо подумать- я просто привык, что Акира все делает с прототипом. Есть работающая ссылка?

   
 
 автор: 1999   (23.08.2006 в 18:20)   письмо автору
 
   для: coloboc66   (23.08.2006 в 18:01)
 

=) http://akira.spb.su/
прямо на главной - если прокурутить чуть ниже есть кнопка "читать (2)"
вот ее код:

<input style="border: 1px solid rgb(208, 208, 208); margin-top: -1px;" onclick="sendcom('82');look_comms('82')" id="submit_82" value="Читать (2)" type="button">

в начале страницы есть это:

<script type="text/javascript">
var ajax_646
/*@cc_on @*/
/*@if (@_jscript_version >= 5)
  try {
  ajax_646=new ActiveXObject("Msxml2.XMLHTTP")
 } catch (e) {
  try {
    ajax_646=new ActiveXObject("Microsoft.XMLHTTP")
  } catch (E) {
   ajax_646=false
  }
 }
@else
 ajax_646=false
@end @*/
if (!ajax_646 && typeof XMLHttpRequest!='undefined') {
 try {
  ajax_646 = new XMLHttpRequest();
 } catch (e) {
  ajax_646=false
 }
}
</script>
<script type="text/javascript">
function sendcom(id,name,email,homepage,text){
ajax_646.open("GET","http://akira.spb.su/mod/comment/get.php",true);
ajax_646.onreadystatechange=function() {
  if (ajax_646.readyState==4) {
       if (ajax_646.status==200) {
        document.getElementById('comments_'+id).innerHTML=ajax_646.responseText
       } else if (ajax_646.status==404) {
        document.getElementById('comments_'+id).innerHTML='Error 404 - File not found !'
       } else {
        document.getElementById('comments_'+id).innerHTML='HTTP Status '+ajax_646.status+' !'
       }
  }
}

ajax_646.setRequestHeader('ID',''+id+'')
ajax_646.setRequestHeader('NAME',''+name+'')
ajax_646.setRequestHeader('EMAIL',''+email+'')
ajax_646.setRequestHeader('HOMEPAGE',''+homepage+'')
ajax_646.setRequestHeader('TEXT',''+text+'')
ajax_646.send(null)
}
</script>


ф-ция look_comms

 function look_comms(a){
    if(document.getElementById("comments_"+a).style.display=="none"){
      document.getElementById("comments_"+a).style.display="block";
    }else{
      if(document.getElementById("comments_"+a).style.display=="block"){
    document.getElementById("comments_"+a).style.display="none";
    }
    }
  };

   
 
 автор: 1999   (23.08.2006 в 18:25)   письмо автору
 
   для: 1999   (23.08.2006 в 18:20)
 

понял о чем вы говорили.
http://akira.spb.su/upload/ajax/prototype.js
http://akira.spb.su/upload/ajax/kernel.js
это?

   
 
 автор: 1999   (23.08.2006 в 18:48)   письмо автору
 
   для: 1999   (23.08.2006 в 18:25)
 

еееее у меня заработало)))

   
 
 автор: 1999   (23.08.2006 в 19:13)   письмо автору
 
   для: 1999   (23.08.2006 в 18:48)
 

везде кроме ИЕ =(

   
 
 автор: coloboc66   (23.08.2006 в 19:18)   письмо автору
 
   для: 1999   (23.08.2006 в 19:13)
 

понял о чем вы говорили.
http://akira.spb.su/upload/ajax/prototype.js
http://akira.spb.su/upload/ajax/kernel.js
это?
- Да- это. prototype.js

   
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования