[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: AJAX
vergin
Здравствуйте. Проблема в следующем: после выбора элемента в выпадающем списке на HTML странице, осуществляется асинхронный запрос к серверу, который, в свою очередь, возвращает ответ в виде XML:

<?xml version='1.0' encoding='utf-8'?>
<response>
<word>
....</word>
<word>
....</word>
<word>
....</word>
</response>



но при попытке распарсить ответ через responseXML, получаю null. Никак не соображу, в чем проблема?

P.S.Пробовал в Chrome, IE6, IE7, Opera, FF3. Из всех только Опера вернула мне XMLObject



Спустя 17 минут, 4 секунды (25.11.2010 - 15:48) Slays написал(а):
Сперва проверь, возвращается ли у тебя ответ, простым алертом, xml код ваще здесь не при чем, если у тебя ответ не возвращается, зачем ты его выложил =)

Спустя 2 минуты, 4 секунды (25.11.2010 - 15:50) sergeiss написал(а):
Цитата (vergin @ 25.11.2010 - 16:31)
но при попытке распарсить ответ через responseXML, получаю null.

"Ты не умничай, а пальцОм ткни" smile.gif Слышал такую фразу? А теперь подумай - кто тут догадается, какой же у тебя код написан, если ты его не покажешь?

Спустя 3 минуты, 33 секунды (25.11.2010 - 15:53) vergin написал(а):
Цитата

Сперва проверь, возвращается ли у тебя ответ, простым алертом, xml код ваще здесь не при чем, если у тебя ответ не возвращается, зачем ты его выложил =)


ответ возвращается )) я написал какой ответ, но я не могу его преобразовать в XMLObject

Спустя 3 минуты, 17 секунд (25.11.2010 - 15:56) vergin написал(а):
JS

var keywordsURL = "getKeywords.php";
var xmlHttpGetKeywords = createXmlHttpRequestObject();
var updateInterval = 1000;
var debugMode = true;
var cache = new Array();


function createXmlHttpRequestObject()
{
var xmlHttp;
if(window.ActiveXObject)
{
try
{
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
catch (e)
{
xmlHttp = false;
}
}

else
{
try
{
xmlHttp = new XMLHttpRequest();
}
catch (e)
{
xmlHttp = false;
}
}


if (!xmlHttp)

alert("Error creating the XMLHttpRequest object.");
else
return
xmlHttp;
}


function loadKeywords()
{
var filename = document.getElementById('keywords').value;
if (xmlHttpGetKeywords)
{
try
{
if (xmlHttpGetKeywords.readyState==4 || xmlHttpGetKeywords.readyState == 0)
{
var params="filename=.\\keywords\\"+filename;
URL = keywordsURL+"?"+params;
xmlHttpGetKeywords.open("GET", URL, true);
xmlHttpGetKeywords.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xmlHttpGetKeywords.onreadystatechange = handleReceivingKeywords;
xmlHttpGetKeywords.send(null);

}
else
{
setTimeout("loadKeywords()", updateInterval);
}
}

catch(e)
{
displayError(e.toString());
}
}

}


function handleReceivingKeywords()
{
if (xmlHttpGetKeywords.readyState == 4)
{
if (xmlHttpGetKeywords.status == 200)
{
try
{
readKeywords();
}
catch(e)
{
displayError(e.toString());
}

}

else
{
displayError(xmlHttpGetKeywords.statusText);
}
}
}


function readKeywords()
{
response = xmlHttpGetKeywords.responseText;
alert(xmlHttpGetKeywords.getAllResponseHeaders());
if (response.indexOf("ERRNO")>=0||response.indexOf("error")>=0 || response.lengh==0)
{
throw(response.length==0?"Server error":response);
}
xmlResponse = xmlHttpGetKeywords.responseXML;

response = xmlHttpGetKeywords.response.documentElement;
}

PHP

if(isset($_GET['filename']))
{
$keywords = file($_GET['filename']);
$response = "<?xml version='1.0' encoding='utf-8'?>";
$response .= "<response>";
foreach($keywords as $keyword)
{
$response.="<keyword>";
$response.=$keyword;
$response.="</keyword>";
}
$response.="</response>";
header(' Content-Type: text/xml');
header(' Expires: Wed, 23 Dec 1980 00:30:00 GMT');
header(' Last-Modified: ' . gmdate('D, d M Y H:i:s') . 'GMT');
header(' Cache-Control: no-cache, must-revalidate');
header(' Pragma: no-cache');
echo $response;
}

Спустя 4 минуты, 49 секунд (25.11.2010 - 16:01) linker написал(а):
Вот тут по моему полная мня
function readKeywords()
{
response = xmlHttpGetKeywords.responseText;
alert(xmlHttpGetKeywords.getAllResponseHeaders());
if (response.indexOf("ERRNO")>=0||response.indexOf("error")>=0 || response.lengh==0)
{
throw(response.length==0?"Server error":response);
}
xmlResponse = xmlHttpGetKeywords.responseXML;

response = xmlHttpGetKeywords.response.documentElement;
}
Разве не достаточно
function readKeywords()
{
return xmlHttpGetKeywords.responseXML; // Получаем XML
}

Спустя 2 минуты, 2 секунды (25.11.2010 - 16:03) vergin написал(а):
xmlHttpGetKeywords.responseXML - возвращает null

Спустя 16 минут, 6 секунд (25.11.2010 - 16:19) sergeiss написал(а):
Для отладки так попробуй сделать: вызови файл ПХП, где формируется ответ, напрямую из браузера. И ты увидишь, что же у тебя там на самом деле приходит. Особенно полезно будет посмотреть оригинальный текст - потому что браузер может показать сначала интерпретированную версию XML.

Я сам сейчас активно с аяксом работаю smile.gif Поэтому такой подход (как я только что описал) очень выручает. Там видно всё, в т.ч. все ошибки из ПХП. Возможно, ты просто где-то "накосячил" и у тебя на самом деле XML не формируется до конца.

Спустя 6 минут, 44 секунды (25.11.2010 - 16:26) vergin написал(а):
php-скрипт возвращает нормальный xml-документ, IE его видит в нормальной, древовидной структуре, как и обычно. Я одного не понимаю, почему Опера нормально кушает xmlHttpGetKeywords.responseXML и возвращает XMLDocument, а все остальные возвращают null unsure.gif

Спустя 10 минут (25.11.2010 - 16:36) sergeiss написал(а):
Вот так попробуй прописать, у тебя чуть короче заголовок. Не знаю, поможет ли :), но других принципиальных отличий от того, с чем я работаю, не вижу.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>

Спустя 3 минуты, 6 секунд (25.11.2010 - 16:39) vergin написал(а):
безрезультатно

Спустя 2 часа, 1 минута, 13 секунд (25.11.2010 - 18:40) vergin написал(а):
ладно, вижу никто не может помочь. Прийдется регуляркой вытягивать данные из тегов dry.gif

Спустя 2 часа, 25 минут, 46 секунд (25.11.2010 - 21:06) ApuktaChehov написал(а):
Покажите тут ЧТО возвращает сервер.
Null получается когда неверный xml документ
Я сам сейчас супермега активно работаю с Ajax + XML. Null появлялся лекго исправлялся. А вообще юзайте фаербаг, он все показывает.

Спустя 1 час, 46 минут, 54 секунды (25.11.2010 - 22:53) sergeiss написал(а):
А вот тут
Цитата (vergin @ 25.11.2010 - 16:56)
xmlResponse = xmlHttpGetKeywords.responseXML;

response = xmlHttpGetKeywords.response.documentElement;
}


Ты не вот это хотел написать? ;)
	xmlResponse = xmlHttpGetKeywords.responseXML;

response = xmlHttpGetKeywords.xmlResponse.documentElement;

Спустя 1 час, 7 минут, 23 секунды (26.11.2010 - 00:01) Guest написал(а):
Sergeiss
да, это ))) но от этого в xmlResponse все-равно ничего не появилось wink.gif

Спустя 3 минуты, 55 секунд (26.11.2010 - 00:04) vergin написал(а):
Цитата (ApuktaChehov @ 25.11.2010 - 20:06)
Покажите тут ЧТО возвращает сервер.
Null получается когда неверный xml документ
Я сам сейчас супермега активно работаю с Ajax + XML. Null появлялся лекго исправлялся. А вообще юзайте фаербаг, он все показывает.


<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<response>
<word>
....</word>
<word>
....</word>
<word>
....</word>
</response>


Спустя 9 часов, 16 минут, 44 секунды (26.11.2010 - 09:21) ApuktaChehov написал(а):
ХЗ вообщем. Но вот с такими заголовками от сервера у меня все работает:
header('Content-Type: text/xml; charset=utf-8');
echo('<?xml version="1.0" encoding="utf-8"?>');

Спустя 45 минут, 41 секунда (26.11.2010 - 10:07) vergin написал(а):
хм, а проблема оказалась банально проста и смешна: в строке заголовка header('Content-Type: text/xml; charset=utf-8'); перед Contetn-Type был случайно добавлен пробел dry.gif. Всем спасибо
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.