Всем привет!
Создан документ, в котором два поля и кнопка, выполняет деление.
Выглядет вот так
test.ru/pic.png
Введенные данные обрабатываются и на экране выводится результат.
Выглядит вот так:
test.ru/pic2.png
Проблема заключается в том, что результат обработки выводится только в FireFox, а в Сhrome всплывает окно с ошибкой,что не может прочесть свойство "documentElement"(всплывающее окно
test.ru/pic3.png)
Вопрос в том, почему код в браузере Chrome не выводится корректно
Код
if($_GET['firstNumber'] != null && $_GET['secondNumber'] != null){
header('Content-Type: text/xml');
require_once ('error_handler.php');
// вычислить частное
$first = $_GET['firstNumber'];
$second = $_GET['secondNumber'];
$result = $first/$second;
// создать новый документ XML
$dom = new DOMDocument();
// создать корневой элемент <response> и добавить его в документ
$response = $dom->createElement('response');
$dom->appendChild($response);
// добавить частное в виде дочернего текстового узла в элемент <response>
$responseText = $dom->createTextNode($result);
$response->appendChild($responseText);
//переписать структуру XML в строковую переменную
$xmlString = $dom->saveXML();
//вывести строку XML
echo $xmlString;
}
else
{
echo <<<_END
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>AJAX: параметры и обработка ошибок в PHP</title>
<script type="text/javascript" src="morephp.js"></script>
</head>
<body>
Попросить сервер разделить
<input type="text" id="firstNumber" />
на
<input type="text" id="secondNumber" />
<input type="button" value="Передать" onclick="process()" />
<div id="myDivElement" />
</body>
</html>
_END;
}
?>
//в этой переменной хранится ссылка на экземпляр XMLHttpRequest
var xmlHttp = createXmlHttpRequestObject();
//создать экземпляр XMLHttpRequest
function createXmlHttpRequestObject()
{
//для хранения ссылки на объект XMLHttpRequest
var xmlHttp;
//Этот участок кода работает во всех браузерах кроме IE6
try
{
//попытка создать объект XMLHttpRequest
xmlHttp = new XMLHttpRequest();
}
catch(e)
{
//предположительно IE6 или более старые версии
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 = newActiveXObject(XmlHttpVersions[i]);
}
catch(e){}
}
}
//вернуть созданный объект или вывести сообщение об ошибке
if(!xmlHttp)
alert("Ошибка создания объекта XMLHttpRequest.");
else
return xmlHttp;
}
// вызывается для чтения файла с сервера
function process()
{
//продолжить только если в xmlHttp не пустая ссылка
if(xmlHttp)
{
//пытаться установить соединение с сервером
try
{
//получть два значения введеные пользователем
var firstNumber = document.getElementById("firstNumber").value;
var secondNumber = document.getElementById("secondNumber").value;
//создать строку с параметрами
var params = "firstNumber="+ firstNumber + "&secondNumber=" +
secondNumber;
//инициировать чтение файла morephp.php с сервера
xmlHttp.open("GET","morephp.php?" +params ,true);
xmlHttp.onreadystatechange = handleRequestStateChange;
xmlHttp.send(null);
}
//вывести сообщение об ошибке в случае неудачи
catch(e)
{
alert("Невозможно соединиться с сервером:\n" + e.toString());
}
}
}
// функция обработки ответа HTTP
function handleRequestStateChange()
{
//когда readyState == 4, мы можем прочитать ответ сервера
if(xmlHttp.readyState == 4)
{
//продолжать только если статус HTTP равен "OK"
if(xmlHttp.status == 200)
{
try
{
// обработать ответ полученный от сервера
handleServerResponse();
}
catch(e)
{
//вывести сообщение об ошибке
alert("Ошибка чтения ответа: " + e.toString());
}
}
else
{
//вывести сообщение о состоянии
alert("Возникли проблемы во время получения данных: \n" + xmlHttp.statusText);
}
}
}
// обработать ответ, полученный от сервера
function handleServerResponse()
{
//прочитать сообщение, полученное от сервера
var xmlResponse = xmlHttp.responseXML;
// предотвратить потенциально возможные ошибки в IE и Opera
if(/*!xmlResponse ||*/ !xmlResponse.documentElement)
throw("Неверная структура XML: \n" + xmlHttp.responseText);
// предотвратить потенциально возможные ошибки в FF
var rootNodeName = xmlResponse.documentElement.nodeName;
if(rootNodeName == "parsererror") throw("Invalid XML structure" + xmlHttp.responseText);
// получить ссылку на корневой элемент XML
xmlRoot = xmlResponse.documentElement;
//проверить коректность принятого XML документа
if(rootNodeName != 'response' || !xmlRoot.firstChild)
throw("Неверный формат документа XML:\n" + xmlHttp.responseText);
//значение,которое требуется отобразить находится
// в дочернем элементе корневого элемента <response>
responseText = xmlRoot.firstChild.data;
// отобразить результат перед пользователем
myDiv = document.getElementById("myDivElement");
myDiv.innerHTML = "Сервер дал ответ: " + responseText;
}
Применяла языки HTML,JS,AJAX, PHP, XML