Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: AJAX + PHP не работабт на сервере UNIX  (Прочитано 19710 раз)
0 Пользователей и 6 Гостей смотрят эту тему.
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(&#39;Content-Type: text/xml&#39;);
//сгенерировать заголовок XML
echo &#39;<?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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #1 : 19-11-2007 06:49 » 

Young, пара вопросов:
1. В обеих случаях браузер один и тот же на одной и той же машине?
2. Что видно, если в браузере напрямую открыть "quickstart.php?name=...имя..." ?
Записан

... мы преодолеваем эту трудность без синтеза распределенных прототипов. (с) Жуков М.С.
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #5 : 19-11-2007 09:45 » 

а еще такой вопрос:
какой браузер?

На Windows все работает нормально...
думаю, что установлен локально апач, соответсвенно браузер - ИЕ, соответсвенно смотреть политика безопасности ИЕ.
проверить работу в альтернативном браузере
Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Young
Гость
« Ответ #6 : 19-11-2007 10:59 » 

браузер Opera, в IE тоже не работает
Записан
RXL
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #11 : 20-11-2007 11:30 » 

Ошибка в скрипте - нет кавычки после echo:
Код: (PHP)
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>&ocirc;, вы мне не знакомы!</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 » new

Я вставаила эту функцию, но он все равно не работает. Он не работает, даже если я меняю весь текст на английский, и ввожу только английские буквы.
       
При загрузке страницы должен выводиться текст "Скажи мне твое имя. ". Но он даже в этом случае выдает ту же ошибку. Когда исправила эту строку на английские буквы, та же ошибка.
Записан
Sla
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Технический
Администратор

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #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
Команда клуба

ua
Offline Offline
Пол: Мужской

WWW
« Ответ #17 : 24-11-2007 14:30 » 

Young, на сервере не обязательно должен  быть поднять сервис(демон) телнета

командой telnet <адрес сервера> <номер порта>
по умолчанию для http серверов адрес - 80

и в данном случае тебе будет отвечать http сервер
после того когда у тебя появится, например пустое окно,
или набери или скопируй в окно следующие строчки:

GET /quickstart.php HTTP/1.1
Host: IP
User-agent: xxx



Записан

Мы все учились понемногу... Чему-нибудь и как-нибудь.
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines