Показать сообщение отдельно
  #1 (permalink)  
Старый 05.04.2013, 22:00
Аватар для Nailya
Кандидат Javascript-наук
Отправить личное сообщение для Nailya Посмотреть профиль Найти все сообщения от Nailya
 
Регистрация: 05.04.2013
Сообщений: 135

Chrome не читает свойство documentElement
Всем привет!

Создан документ, в котором два поля и кнопка, выполняет деление.
Выглядет вот так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
Ответить с цитированием