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

HTML+CSS+JavaScript

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

 

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

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

тема: request.readyState == 1
 
 автор: Хулиган   (08.08.2010 в 12:27)   письмо автору
 
 

Добрый день.
Помогите с аяксом.
Вот такой простейший код. Приведен полностью, без изменений:

<html>
<body>
<script src="../lib/JsHttpRequest.js"></script>
<script type="text/javascript" language="javascript">
    var req = new JsHttpRequest();
    req.onreadystatechange = function() {
        document.write(req.readyState.toString());
        if (req.readyState == 4){
            var response = req.responseJS.retvalue;
            alert(response);
        }
        return false;
    }

    req.open(null, 'request.php', true);
    var value = 'asd';
    req.send( { val: value } );
</script>
</body>
<html>


php-скрипт (request.php).

<?php
require_once "lib/JsHttpRequest.php";
$JsHttpRequest =& new JsHttpRequest("windows-1251");
$GLOBALS['_RESULT']['retvalue']='zzz';
echo 
'dsfgdfgdf';
?>


req.readyState всегда равен 1.
Состояние req.readyState == 4 не наступает.
Консоль ошибок в файрфоксе сообщает, что ошибка: header уже был отослан. Или присутствуют пробелы или переводы строки перед скриптом.
Ничего подобного не вижу. Где засада-то?

  Ответить  
 
 автор: АЯ   (08.08.2010 в 17:47)   письмо автору
 
   для: Хулиган   (08.08.2010 в 12:27)
 

1.
req.open(null, 'request.php', true); 
Обычно здесь вместо зачёркнутого пишут 'GET' или 'POST'. У Вас же почему-то null.
Мей би, я и не прав, ибо всякие-разные библиотеки никогда не использовал.

2.
document.write(req.readyState.toString()); 
Метод write () полностью переписывает текущий документ, уничтожая ВСЁ написанное ранее. В том числе и скрипты. Как я понял, он нужен Вам для отслеживания статуса объекта req. Сделайте так:
замените строку с write () на:

document.getElementById ('TXT').value += req.readyState +'\n';

а в теле документа добавьте

<textarea rows="10" cols="30" id="TXT"></textarea>

  Ответить  
 
 автор: Хулиган   (08.08.2010 в 20:03)   письмо автору
 
   для: АЯ   (08.08.2010 в 17:47)
 

Пробовал и GET/POST - без разницы.
write тоже менял. И на вывод в текстареа, и на алерты - в любом случае readyState достинает только значения 1. До 4 не доходит.

  Ответить  
 
 автор: АЯ   (08.08.2010 в 20:26)   письмо автору
 
   для: Хулиган   (08.08.2010 в 20:03)
 

Если Вам нужно сделать что-то работающее, то смотрите сюда - http://codecenter.awardspace.com/selects.html

Ну а если для Вас главное - сделать ИМЕННО используя библиотеку JsHttpRequest.js, то тут я Вам не помогу.

  Ответить  
 
 автор: Хулиган   (09.08.2010 в 02:37)   письмо автору
 
   для: АЯ   (08.08.2010 в 20:26)
 

Посмотрел ссылку - да, работает. Только не нашёл способа передачи массивов: responseJS в XMLHTTPRequest отсутствует.
Пришлось вернуться к JsHttpRequest
Проблема решилась удалением амперсанда из строки
$JsHttpRequest =& new JsHttpRequest("windows-1251");

Почему амперсанд влияет - не понял. Тем более, что с таким кодом два сайта делал - всё работало.
И примеры в сети все с амперсандом. Но в данном конкретном случае пришлось удалить его:
$JsHttpRequest = new JsHttpRequest("windows-1251");
И всё встало на место.

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

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