Young
Гость
|
|
« : 19-11-2007 06:19 » |
|
Помогите пожалуйста разобраться в проблеме. Есть 3 файла index.html<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html xmlns="http://www.w3.og/1999/xhtml"> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <head> <title>Ajax and PHP: Quickstart</title> <script type="text/javascript" src="quickstart.js"></script> </head>
<body onload='process()'> Сервер желает узнать Ваше имя:
<input type="text" id="myName" /> <div id="divMessage" />
</body> </html> quickstart.js//Запомним ссылку на объект XMLHttpRequest var xmlHttp=createXmlHttpRequestObject();
//создать объект XMLHttpRequest function createXmlHttpRequestObject() { //для хранения ссылки на объект XMLHttpRequest var xmlHttp; //если сценария Лена запущен под управлением Internet Explorer if(window.ActiveXObject){ try{ xmlHttp=new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { xmlHttp=false; } } //если сценария запущен под уплавлением Mozilla и другого браузера else{ try{ xmlHttp=new XMLHttpRequest(); } catch (e){ xmlHttp=false; } } //вернуть созданный объект или вывести сообщение об ошибке if (!xmlHttp) alert("Ошибка создания объекта XmlHttpReques"); else return xmlHttp; }
//выполнить ассинхронный запрос HTTP с помощью объекта XmlHttpRequest function process(){ //работа возможна только если объект xmlHttp не занят if (xmlHttp.readyState==4 || xmlHttp.readyState==0){ //получить имя введеное пользователем в форму name=document.getElementById("myName").value; //обратиться к сценария quickstart.php на сервер xmlHttp.open("GET","quickstart.php?name="+name,true); //определить метод, который будет обрабатывать ответы сервера xmlHttp.onreadystatechange=handleServerResponse; //послать ассинхронный запрос серверу xmlHttp.send(null); }else{ //если соединение занято, повторить попытку через 1 секунду setTimeout("process()",1000); } }
//вызывается автоматически по прибытии сообщения от сервера function handleServerResponse(){ //продолжать можно только если транзакция с сервером завершена if (xmlHttp.readyState==4){ //значение 200 говорить о том что транзакция прошла успешна if (xmlHttp.status==200){ //извлечь XML полученную от сервера
xmlResponse=xmlHttp.responseXML; //получить корневой элемент в структуре XML //showResults(xmlResponse); xmlDocumentElement=xmlResponse.documentElement; //извлечь текстовое сообщение, которое находится в первом дочерном элементе корневого узла
helloMessage=xmlDocumentElement.firstChild.data; //обновить текст сообщения на экране document.getElementById("divMessage").innerHTML="<i>"+helloMessage+"</i>"; //повторить последовательность действий setTimeout("process()",1000); } //код статуса HTTP отличный от 200 говорит о наличие ошибки else{ alert("При обращении к серверу возникли проблемы: "+xmlHttp.statusText); } } } quickstart.php<?php //результаты будем отправлять в формате XML header('Content-Type: text/xml'); //сгенерировать заголовок XML echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; //создать элемент response echo '<response>'; //получить имя пользователя $name=$_GET['name']; //сгенерировать текст сообщения в зависимости от имени пользователя, принятого от клиента $userNames=array('CRISTIAN','BOGDAN','FILLIP','MIHAI','YODA'); if (in_array(strtoupper($name),$userNames)){ echo 'Здравствуйте мастер '. htmlentities($name)."!"; }elseif(trim($name)==""){ echo "Скажи мне как зовут тебя, незнакомец!"; }else{ echo htmlentities($name). ', вы мне не знакомы!'; } //закрыть элемент response echo "</response>";
?>
Все файлы находятся в одной папке. На Windows все работает нормально, почему-то когда копирую на Unix сервер, JavaScript выдает ошибку: xmlDocumentElement is null or not an Object/ Помогоите, пожалуйста разобраться в чем здесь проблема?
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #1 : 19-11-2007 06:49 » |
|
Young, пара вопросов: 1. В обеих случаях браузер один и тот же на одной и той же машине? 2. Что видно, если в браузере напрямую открыть "quickstart.php?name=...имя..." ?
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Sla
|
|
« Ответ #2 : 19-11-2007 07:34 » |
|
возможно не полностью сконфигурирован http-демон на *nix
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Young
Гость
|
|
« Ответ #3 : 19-11-2007 08:56 » |
|
RXL, 1) в обеих случаях браузер один и тот же 2) если набрать напрямую quickstart.php?name=f" <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> - <response> <ans>f, вы мне не знакомы!</ans> </response>
|
|
« Последнее редактирование: 19-11-2007 09:02 от Young »
|
Записан
|
|
|
|
Young
Гость
|
|
« Ответ #4 : 19-11-2007 08:59 » |
|
А что такое http-демон на *nix. (Извините я в серверах плохо разбираюсь)
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #5 : 19-11-2007 09:45 » |
|
а еще такой вопрос: какой браузер?
На Windows все работает нормально... думаю, что установлен локально апач, соответсвенно браузер - ИЕ, соответсвенно смотреть политика безопасности ИЕ. проверить работу в альтернативном браузере
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Young
Гость
|
|
« Ответ #6 : 19-11-2007 10:59 » |
|
браузер Opera, в IE тоже не работает
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #7 : 19-11-2007 14:43 » |
|
Young, вижу несоответствие приведенного php-кода и ответа: тег "<ans>" в коде отсутствует. Наверное ты не тот код привел.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Young
Гость
|
|
« Ответ #8 : 20-11-2007 07:29 » |
|
Прощу прощенья <?xml version="1.0" encoding="UTF-8" standalone="yes" ?> <response>f, вы мне не знакомы!</response>
Очень много раз код меняла, не ту версию написала, но с этим кодом тоже не работает
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #9 : 20-11-2007 07:47 » |
|
Young, этот ответ ты получаешь, обращаясь к unix-серверу?
Атрибут standalone="yes" я бы убрал. В header('Content-Type: text/xml') я бы добавил кодировку: header('Content-Type: text/xml; charset=utf-8'). Есть подозрение, что в конфиге Апача указана дефолтная кодировка.
|
|
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Young
Гость
|
|
« Ответ #10 : 20-11-2007 09:18 » |
|
Да. в конфиге Апача указана дефолтная кодировка UTF-8. Убрала атрибут standalone. Header тоже изменила, та же ошибка
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #11 : 20-11-2007 11:30 » |
|
Ошибка в скрипте - нет кавычки после echo: echo <?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; ------------- Есть! Проблема в htmlentities(). Можно кодировать в entity только пять символов: ' " < > & - это стандартные сущности XML. Все прочие сущности необходимо объявлять. Используя же utf-8 нет нужды в других сущностях. quickstart.php?name=%F4 (name=ф) <?xml version="1.0" encoding="UTF-8" ?><response>ô, вы мне не знакомы!</response>Следует использовать htmlspacialchars(). http://ru2.php.net/manual/ru/function.htmlspecialchars.php---- Просто составители наверняка были американской национальности и весь их алфавит состоит из ASCII - типа можно не думать о кодировках.
|
|
« Последнее редактирование: 20-11-2007 11:51 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Young
Гость
|
|
« Ответ #12 : 21-11-2007 06:13 » |
|
Я вставаила эту функцию, но он все равно не работает. Он не работает, даже если я меняю весь текст на английский, и ввожу только английские буквы. При загрузке страницы должен выводиться текст "Скажи мне твое имя. ". Но он даже в этом случае выдает ту же ошибку. Когда исправила эту строку на английские буквы, та же ошибка.
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #13 : 21-11-2007 08:11 » |
|
надо js скриптом раскрутить полученный ответ возможно что приходит не полный xml
|
|
« Последнее редактирование: 21-11-2007 08:14 от Sla »
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
Young
Гость
|
|
« Ответ #14 : 21-11-2007 09:49 » |
|
Вместо responseXML применила responseText и вывела этот response в myDiv. Он ыводит строку "Скажи мне твое имя, нехнакомец", при АЛЕРТЕ ВЫВОДИТ ТОТ ОТВЕТ,ЧТО РHР скрипт. Но обработка XML-объекта не получается
|
|
|
Записан
|
|
|
|
RXL
Технический
Администратор
Online
Пол:
|
|
« Ответ #15 : 22-11-2007 07:53 » |
|
Young, надо ответ сервера XML-валидатором проверить - может еще какие-то нестандартные моменты присутствуют.
Кстати, htmlentities() там в двух местах встречается - надо оба заменить.
Приведи полный текст ответа сервера, если запрос послать посредством telnet:
> telnet IP 80 GET /quickstart.php HTTP/1.1 Host: IP User-agent: xxx
|
|
« Последнее редактирование: 22-11-2007 07:55 от RXL »
|
Записан
|
... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
|
|
|
Young
Гость
|
|
« Ответ #16 : 24-11-2007 05:18 » |
|
На моем сервере telnet не работает
|
|
|
Записан
|
|
|
|
Sla
|
|
« Ответ #17 : 24-11-2007 14:30 » |
|
Young, на сервере не обязательно должен быть поднять сервис(демон) телнета
командой telnet <адрес сервера> <номер порта> по умолчанию для http серверов адрес - 80
и в данном случае тебе будет отвечать http сервер после того когда у тебя появится, например пустое окно, или набери или скопируй в окно следующие строчки:
GET /quickstart.php HTTP/1.1 Host: IP User-agent: xxx
|
|
|
Записан
|
Мы все учились понемногу... Чему-нибудь и как-нибудь.
|
|
|
|