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

HTML+CSS+JavaScript

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: ajax срабатывает несколько раз

Сообщения:  [1-8] 

 
 автор: moonfox   (29.06.2011 в 19:13)   письмо автору
 
   для: TavRoX   (29.06.2011 в 16:18)
 

рейтинг на сайте
(это часть всего что надо для работы)

  Ответить  
 
 автор: TavRoX   (29.06.2011 в 16:18)   письмо автору
 
   для: moonfox   (29.06.2011 в 00:47)
 

вопрос
а что этот скрипт делает?
лень вникать если честно

  Ответить  
 
 автор: moonfox   (29.06.2011 в 00:47)   письмо автору
 
   для: 0987654   (29.06.2011 в 00:42)
 

спасибо

  Ответить  
 
 автор: 0987654   (29.06.2011 в 00:42)
 
   для: moonfox   (29.06.2011 в 00:23)
 

Это как раз таки самый адекватный способ из существующих.

Можно, конечно, поменять местами строки - сначала open и send, и только потом назначить onreadystatechange - тогда функция теоретически сработает только два раза. Но здесь Вы рискуете не поймать данные - при хорошей связи ответ может сформироваться ранее, чем браузер назначит реквесту функцию.

Ну и, разумеется, можно вовсе не использовать onreadystatechange, а просто после send запустить таймер и через строго фиксированное время один раз проверить readyState. Но здесь Вы будете либо терять время (если связь хорошая), либо рискуете потеряете данные, если чуть-чуть не дождётесь ответа.

  Ответить  
 
 автор: moonfox   (29.06.2011 в 00:23)   письмо автору
 
   для: moonfox   (29.06.2011 в 00:21)
 

еще вопрос... это вообще адекватно или ..?)))

  Ответить  
 
 автор: moonfox   (29.06.2011 в 00:21)   письмо автору
 
   для: 0987654   (29.06.2011 в 00:18)
 

это я понял потом...)))
сорри

  Ответить  
 
 автор: 0987654   (29.06.2011 в 00:18)
 
   для: moonfox   (28.06.2011 в 23:19)
 

Вы же САМИ написали строку:
httpRequest.onreadystatechange = check4;

Которую на русском языке можно прочитать так: как только readyState объекта httpRequest изменится, то запускается функция check4

readyState в нормальном режиме изменяется с исходного 0 до 4 последовательно:
0 - объект создан, но ещё не инициализирован (не поступила команда open)
1 - объект открыт (сработал метод open), но запроса к серверу (send) ещё нет
2 - запрос серверу ушел (сработал send), но ответ с сервера ещё не поступал
3 - сервер начал отвечать, но responseText и responseBody ещё не сформированы
4 - ответ сервера получен полностью, все свойства доступны

В трёх первых случаях функция check4 запускается и происходит выход из неё return'ом.
В четвёртом (последнем) случае (когда readyState == 4) запускается функция processReqChange

  Ответить  
 
 автор: moonfox   (28.06.2011 в 23:19)   письмо автору
 
 

Здравствуйте,
почему то функция в аяксе срабатывает 5 раз...
function vote(str)
{
 loadXMLDoc(str, '', 3);
}


var httpRequest;
var old_id = 'd0', old_txt = '', editor, idpost;

function loadXMLDoc(url, poststr, post)
{   

idpost = post;

if (window.XMLHttpRequest) {
        httpRequest = new XMLHttpRequest();
        if (httpRequest.overrideMimeType) {
            httpRequest.overrideMimeType('text/xml');
        }
    } 
    else if (window.ActiveXObject) {
        try {
            httpRequest = new ActiveXObject("Msxml2.XMLHTTP");
        } 
        catch (e) {
            try {
                httpRequest = new ActiveXObject("Microsoft.XMLHTTP");
            } 
            catch (e) {}
        }
    }

 if (!httpRequest) {
        alert('Giving up :( Cannot create an XMLHTTP instance');
        return false;
    }
       
    
           httpRequest.onreadystatechange = check4;
        httpRequest.open("GET", url, true);
        httpRequest.send(null);
    
}

function check4()


   if (httpRequest.readyState != 4)
    return;
    
    processReqChange()
}


onclick="vote('vote.php?id=1&f=4&pos=1');"

function check4() - 5 раз отрабатывает.... с чем это может быть связано?

  Ответить  

Сообщения:  [1-8] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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