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

HTML+CSS+JavaScript

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

 

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

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

тема: AJAX не всегда срабатывает
 
 автор: sasha12342   (14.03.2013 в 19:37)   письмо автору
 
 

Здравствуйте.
Помогите разобраться почему "хромает" ajax:

<script type="text/javascript">
function startAjax1(){
  var request;
  if(window.XMLHttpRequest){
      request = new XMLHttpRequest();
  } else if(window.ActiveXObject){
      request = new ActiveXObject("Microsoft.XMLHTTP");  
  } else {
      return;
  }
 
  request.onreadystatechange = function(){
        switch (request.readyState) {
          case 4:{
           if(request.status==200){    
                        print_console("<br/><em>4: Обмен завершен.</em>");
                        document.getElementById("printResult1").innerHTML = "<span>"+request.responseText+"</span>";
                     }else if(request.status==404){
                        alert("Ошибка: запрашиваемый скрипт не найден!");
                     }
                      else alert("Ошибка: сервер вернул статус: "+ request.status);
           
            break
            }
        }      
    }
request.open("POST",'fail_abradotchic.php', true);
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send("peremennaya1=<?php echo $xxx1?>&peremennaya2=<?php echo $xxx2?>");
  }
  function print_console(text){
    document.getElementById("printResult1").innerHTML;
  }

function startAjax2(){
  var request;
  if(window.XMLHttpRequest){
      request = new XMLHttpRequest();
  } else if(window.ActiveXObject){
      request = new ActiveXObject("Microsoft.XMLHTTP");  
  } else {
      return;
  }
 
  request.onreadystatechange = function(){
        switch (request.readyState) {
          case 4:{
           if(request.status==200){    
                        print_console("<br/><em>4: Обмен завершен.</em>");
                        document.getElementById("printResult2").innerHTML = "<span>"+request.responseText+"</span>";
                     }else if(request.status==404){
                        alert("Ошибка: запрашиваемый скрипт не найден!");
                     }
                      else alert("Ошибка: сервер вернул статус: "+ request.status);
           
            break
            }
        }      
    }
request.open("POST",'fail_abradotchic.php', true);
request.setRequestHeader("Content-type","application/x-www-form-urlencoded");
request.send("peremennaya1=<?php echo $yyy1?>&peremennaya2=<?php echo $yyy2?>");
  }
  function print_console(text){
    document.getElementById("printResult2").innerHTML;
  }
</script>

вывод результата обработки:

<span id='printResult1'><span onclick='startAjax1()'>текст1 до запроса \ результат1 обработки</span></span>
<span id='printResult2'><span onclick='startAjax2()'>текст2 до запроса \ результат2 обработки</span></span>

Так вот, если нажать на текст1 то вместо него появится результат обработки данных, которые были отправлены на страницу "fail_abradotchic.php" после чего перезагружаем страницу и нажимаем на текст2, с ним происходит тоже самое. Если последовательно нажимать на текст1 и текст2 в любом порядке (без перезагрузки страницы) всё работает отлично.
Но если сперва нажать на текст2, перезагрузить страницу, а потом нажать на текст1 то результат обработки не появляется но данные на страницу "fail_abradotchic.php" передаются.
В чём может быть проблема?

  Ответить  
 
 автор: ЯСА   (14.03.2013 в 21:00)   письмо автору
 
   для: sasha12342   (14.03.2013 в 19:37)
 

ваши функции print_console () оба раза умиляют
что они, по-вашему, делают? :)
document.getElementById("printResult2").innerHTML - это значение свойства
значение свойство может быть:
-- либо прочитано
-- либо изменено
и... tertium поп datur - третьего не дано!

у вас же это значение свойства "просто висит" - не читается и не изменяется
сиречь это полностью ПУСТАЯ функция, ничего не делающая и ничего не возвращающая
---------

здесь у вас так называемый случай "многократных запросов" из разных мест страницы с выводом в разные места страницы

я как-то делал подобную штуку (для "запросов из разных мест страницы" с "запросами к разным файлам на сервере", но "для вывода в одно место") - см. http://codecenter.awardspace.com/textajax1711.html - там все коды имеются

там была задача показать:
-- что ни один из запросов не "теряется" при использовании всего одной функции, и
-- что можно запрашивать в любом порядке, и
-- что при этом можно отследить порядковый номер каждого из запросов (в одном из php-файлов для наглядности сделана задержка на 2 секунды)

изменить вам надо следующее:
-- вместо параметра функции file вам надо прописать место вывода place
и, соответственно, передавать функции из первого места printResult1, а из второго - printResult2

-- создать свойство объекта HTR [curr_index].placeX = place, чтобы в функции по onreadystatechange вывести респонс не в document.getElementById ('inf'), а в document.getElementById ('HTR [curr_index].placeX')

PS. если честно, в старых MSIE (где не поддерживается объект XMLHttpRequest) это дело не работает, потому что объект ActiveXObject ('Microsoft.XMLHTTP') категорически не поддерживает "самопальных" свойств
если критично, то свистните... сделаю :)

  Ответить  
 
 автор: sasha12342   (14.03.2013 в 21:40)   письмо автору
 
   для: ЯСА   (14.03.2013 в 21:00)
 

Спасибо!
Пока ещё не критично :) так... в целях собственного развития.
А если что, то кому свистеть? :) У меня-же нет Ваших данных.

  Ответить  
Rambler's Top100
вверх

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