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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проблема с выводом XMLHttpRequest 
:(
    Опции темы
korob2001
Дата 14.11.2007, 07:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Привет!!!
Столкнулся с такой проблемой. Есть такая страничка HTML:
Код

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Работа XMLHttpRequest</title>
<script type="text/javascript" src="./scripts/search.js"></script>
<script type="text/javascript">
    <!--//
        function getTxt() {
            document.getElementById('txt').innerHTML = getServerSideText('/cgi-bin','test.pl','');
        }
    //-->
</script>
</head>
<body>
    <form>
        <table width="300" cellspacing="5" cellpadding="5" border="0">
            <tr>
             <td style="text-align:right">
                 <input type="button" value="Get Text" onclick="getTxt()" />
                </td>
            </tr>
        </table>
        <br/><br/>
        <div id="txt" style="font-size:18px; font-weight:bold; color:#cc0000">&nbsp;</div>
    </form>     
</body>
</html>

Как видно здесь я подключаю файл search.js, в котором через XMLHttpRequest подключаюсь к Perl программе на стороне сервера, которая выводит строку. Вот код файла search.js
Код

// JavaScript Document
function createXmlHttpRequest() {
  var xhreq = false;
  try {
    xhreq = new ActiveXObject("Msxml2.XMLHTTP");
  } catch (e) {
    try {
      xhreq = new ActiveXObject("Microsoft.XMLHTTP");
    } catch (E) {
    
    xhreq = false;
    }
  }
  if (!xhreq && typeof XMLHttpRequest!='undefined') {
    xhreq = new XMLHttpRequest();
  }
  return xhreq;
}

function getServerSideXml(path, fileName, params) {
    var req = createXmlHttpRequest();
    var xml = "";
    req.open('GET', path + '/' + fileName + '?r=' + Math.random() + '&' + encodeURIComponent(params), true); 
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
          if(req.status == 200) {
                xml = req.responseXML;
            }
        }
    };
    req.send(null);
    return xml;
}

function getServerSideText(path, fileName, params) {
    var req = createXmlHttpRequest();
    var text = "";
    req.open('GET', path + '/' + fileName + '?r=' + Math.random() + '&' + encodeURIComponent(params), true); 
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
          if(req.status == 200) {
                text = req.responseText;
            } 
        }
    };
    req.send(null);
    //alert(text);
    return text;
}

И наконец код Perl программы, он довольно таки прост, выводит текущую дату и время.
Код

#!/usr/bin/perl
my $tm = localtime;

print "Content-Type: text/plain\n\n";
print $tm;

Проблема в том, что при нажатии на кнопку, ничего не выводится в <div>, но если раскоментировать alert в .js файле, в функции getServerSideText(), то показывается окно alert пустое, но зато после его закрытия в div появляется полученная строка. Подскажите, в чём проблема???? Как избавиться от alert, а результат просто вывести в <div>?

Заранее благодарен.


--------------------
"Время проходит", - привыкли говорить вы по неверному пониманию. 
"Время стоит - проходите вы".
PM MAIL WWW ICQ MSN   Вверх
ksnk
Дата 14.11.2007, 09:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Это тест на сообразительность? Или действительно комодератору этого форума нужно объяснять, что сам факт посылки реквеста (...send()) не означает его моментального исполнения?

С алертом получается так, что за время, пока алерт показывается, этот самый реквест успевает выполнится...

Добавлено через 5 минут и 17 секунд
Каким-то решением проблемы было бы изменить все вот так:
Код

        function getTxt() {
            getServerSideText('/cgi-bin','test.pl','',function(txt){document.getElementById('txt').innerHTML = txt});
        }



соответственно, в getServerSideText добавлен параметр callback  
Код

function getServerSideText(path, fileName, params,callback ) {
    var req = createXmlHttpRequest();
    req.open('GET', path + '/' + fileName + '?r=' + Math.random() + '&' + encodeURIComponent(params), true); 
    req.onreadystatechange = function() {
        if (req.readyState == 4) {
          if(req.status == 200) {
               callback( req.responseText); // 
            } 
        }
    };
    req.send(null);
}



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


Эксперт
****


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

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



Цитата(ksnk @  14.11.2007,  06:35 Найти цитируемый пост)
Это тест на сообразительность? Или действительно комодератору этого форума нужно объяснять, что сам факт посылки реквеста (...send()) не означает его моментального исполнения?

Эх ksnk, ты так говоришь, вроде я модератор раздела JavaScript и вот я пришёл и гружу тебя своими детскими вопросами. Кстати, паскаля я не знаю вообще, да и не только паскаля.  smile 

Ну а вообще спасибо за помощь, действительно помогло.


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


 




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


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

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