Zigfrid
Новичок
ошибка в Mozilla
Добрый день.
Пытаюсь Ajax изучить. Пытаюсь по книжке простенький код написать. Php формирует xml и передаёт его на вебстраницу через javascript. В результате в IE7 содержимое XML отображается нормально, а в Мозилле (2.0.0.8) срабатывает обработка исключения (выделил в коде красным цветом).
Причём почему-то в Мозилле, не отображаются русские буквы ошибки.
Может подскажите что-то?
phptest.html
phptest.js
phptest.php
Добрый день.
Пытаюсь Ajax изучить. Пытаюсь по книжке простенький код написать. Php формирует xml и передаёт его на вебстраницу через javascript. В результате в IE7 содержимое XML отображается нормально, а в Мозилле (2.0.0.8) срабатывает обработка исключения (выделил в коде красным цветом).
Причём почему-то в Мозилле, не отображаются русские буквы ошибки.
Может подскажите что-то?
phptest.html
Код:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/xhtml11.dtd">
<html>
<head>
<title>Teach Ajax</title>
<script type='text/javascript' src='phptest.js'></script>
</head>
<body onload='process()'>
Книга об Ajax
<br />
<div id='myDivElement' />
</body>
</html>
Код:
//переменная для хранения ссылки на объект XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
//создаёт экземпляр объекта XMLHttpRequest
function createXmlHttpRequestObject()
{
//переменная для хранения ссылки на объект XMLHttpRequest
var xmlHttp;
//эта часть кода должна работать во всех броузерах за искл. ИЕ6 и более старых его версий
try
{
//попытаться создать объект XMLHttpRequest
xmlHttp = new XMLHttpRequest();
}
catch(e)
{
//предполагается, что в качестве броузера используется ИЕ6 или более старая его версия
var XmlHttpVersions = new Array("MSXML2.XMLHTTP.6.0","MSXML2.XMLHTTP.5.0","MSXML2.XMLHTTP.4.0","MSXML2.XMLHTTP.3.0","MSXML2.XMLHTTP","Microsoft XMLHTTP");
//попробовать все возможные prog id пока какая-то попытка не увенчается успехом
for (var i=0; i<XmlHttpVersions.length && !xmlHttp; i++)
{
try
{
//попытаться создать объект XMLHttpRequest
xmlHttp = new ActiveObject(XmlHttpVersions[i]);
}
catch(e) {}
}
}
//вернуть созданный объект или вывести сообщение об ошибке
if (!xmlHttp)
alert("Ошибка создания объекта XMLHttpRequest");
else
return xmlHttp;
}
//вызывается для чтения файла с сервера
function process()
{
//продолжать только, если xmlHttp не пустая срока
if (xmlHttp)
{
//попытаться установить соединение с сервером
try
{
//инициировать чтение файла с сервера
xmlHttp.open("GET","phptest.php",true);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send(null);
}
//вывести сообщение об ошибке в случае неудачи
catch(e)
{
alert("111Невозможно соедениться с сервером:\n" + e.toString())
}
}
}
//эта функция вызывается при изменении состояния запроса HTTP
function handleRequestStateChange()
{
//когда readyState = 4, мы можем прочитать ответ сервера
if (xmlHttp.readyState == 4)
{
//продолжать тлько, если статус HTTP равен ОК
if (xmlHttp.status == 200)
{
try
{
//обработать ответ, полученный с сервера
handleServerResponse();
}
catch(e)
{
//вывести сообщение об ошибке
[COLOR=red]alert("222Ошибка чтения ответа:\n" + e.toString())[/COLOR]
}
}
else
{
//вывести сообщение об состоянии
alert("333Возникли проблемы во время получения данных:\n" + xmlHttp.statusText);
}
}
}
//обрабатывает ответ, полученный с сервера
function handleServerResponse()
{
//прочитать сообщение, полученное с сервера
var xmlResponse = xmlHttp.responseXML;
//предотвратить потенциально возможные ошибки в ИЕ и Опере
if (!xmlResponse || !xmlResponse.documentElement)
throw("Неверная структура XML:\n" + xmlHttp.response)
//предотвратить потенциально возможные ошибки в Firefox
var rootNodeName = xmlResponse.documentElement.nodeName;
if (rootNodeName == "parsererror")
throw("Invalid XML structer:\n" + xmlHttp.response)
//получить ссылку на корневой элемент документа XML
xmlRoot = xmlResponse.documentElement;
//получить ссылки на массивы с названия ми книг и их ISBN
titleArray = xmlRoot.getElementsByTagName("title");
isbnArray = xmlRoot.getElementsByTagName("isbn");
//сгенерировать ХТМЛ код
var html = "";
//обойти в цикле массивы и создать структуру ХТМЛ
for (var i = 0; i < titleArray.length; i++)
html += titleArray.item(i).firstChild.data + isbnArray.item(i).firstChild.data + "<br/>";
//получить ссылку на новый элемент <div>
myDiv = document.getElementById("myDivElement");
//вывести полученный код ХТМЛ
myDiv.innerHTML = html;
}
Код:
<?php
//определить формат выходных данных как XML
header("Content-Type: text/xml");
//создать новый документ XML
$dom = new DOMDocument();
//создать корневой элемент <response>
$response = $dom->createElement("response");
$dom->appendChild($response);
//создать элемент <books> и добавить его как дочерний по отношению к <response>
$books = $dom->createElement("books");
$response->appendChild($books);
//создать элемент title для элемента book
$title = $dom->createElement("title");
$titleText = $dom->createTextNode("EL Libro");
$title->appendChild($titleText);
//создать элемент isbn для элемента book
$isbn = $dom->createElement("isbn");
$isbnText = $dom->createTextNode("1-90908-21");
$isbn->appendChild($isbnText);
//создать элемент book
$book = $dom->createElement("book");
$book->appendChild($title);
$book->appendChild($isbn);
//добавить элемент <book> как дочерний по отношению к элементу <books>
$books->appendChild($book);
//переписать структуру XML в строковую переменную
$xmlString = $dom->saveXML();
//вывести строку XML
echo $xmlString;
?>