|
|
|
| Здравствуйте.
Помогите разобраться почему "хромает" 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" передаются.
В чём может быть проблема? | |
|
|
|
|
|
|
|
для: 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') категорически не поддерживает "самопальных" свойств
если критично, то свистните... сделаю :) | |
|
|
|
|
|
|
|
для: ЯСА
(14.03.2013 в 21:00)
| | Спасибо!
Пока ещё не критично :) так... в целях собственного развития.
А если что, то кому свистеть? :) У меня-же нет Ваших данных. | |
|
|
|