Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #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
Ответить с цитированием
  #2 (permalink)  
Старый 06.04.2013, 06:03
Аватар для danik.js
Профессор
Отправить личное сообщение для danik.js Посмотреть профиль Найти все сообщения от danik.js
 
Регистрация: 11.09.2010
Сообщений: 8,804

Сервер правильный заголовок Content-Type выставляет? Должен быть application/xml или text/xml.
Сообщение от Nailya
Применяла языки ... AJAX ...
Чего???
Ответить с цитированием
  #3 (permalink)  
Старый 06.04.2013, 13:43
sinistral
Посмотреть профиль Найти все сообщения от melky
 
Регистрация: 28.03.2011
Сообщений: 5,418

Сообщение от danik.js
Чего???
language.apply()

Сообщение от Nailya
Применяла языки HTML,JS,AJAX, PHP, XML
куда применяли (т.е. к чему)?
Ответить с цитированием
  #4 (permalink)  
Старый 07.04.2013, 11:46
Аватар для Nailya
Кандидат Javascript-наук
Отправить личное сообщение для Nailya Посмотреть профиль Найти все сообщения от Nailya
 
Регистрация: 05.04.2013
Сообщений: 135

оговорилась AJAX не язык, а технология, в общем применила AJAX
Content-Type: text/xml как написано у меня в скрипте выше
Ответить с цитированием
  #5 (permalink)  
Старый 07.04.2013, 11:48
Аватар для Nailya
Кандидат Javascript-наук
Отправить личное сообщение для Nailya Посмотреть профиль Найти все сообщения от Nailya
 
Регистрация: 05.04.2013
Сообщений: 135

Пожалуйста отвечайте по существу, не надо придираться к словам, это пустая трата времени
Ответить с цитированием
  #6 (permalink)  
Старый 07.04.2013, 14:35
Кандидат Javascript-наук
Отправить личное сообщение для aleks_lv Посмотреть профиль Найти все сообщения от aleks_lv
 
Регистрация: 23.04.2010
Сообщений: 105

скопировал Ваш код...работает нормально во всех браузерах в том числе и хроме... у меня Версия 26.0.1410.43 m
Ответить с цитированием
  #7 (permalink)  
Старый 07.04.2013, 15:03
Аватар для Nailya
Кандидат Javascript-наук
Отправить личное сообщение для Nailya Посмотреть профиль Найти все сообщения от Nailya
 
Регистрация: 05.04.2013
Сообщений: 135

Код у вас сработал из-за того, что я не включила сюда обрабодчик ошибок, который я включила в php-код -- error_handler.php

Во всяком случае, теперь я знаю, что проблема в моем обрабодчике ошибок. Вопрос, почему из-за него chrome выдает ошибку, а FF работает нормально
// установить ф-ию error_handler.php, как обработчик ошибок по умолчанию
set_error_handler('error_handler', E_ALL);

// ф-ия обработки ошибок
function error_handler($errNo,$errStr,$errFile,$errLine)
{
    //удалить выходные данные, которые уже были созданы
    if(ob_get_length()) ob_clean();
    
    //вывести сообщения об ошибке
    $error_message = 'ERRNO: ' . $errNo . chr(10) . '<br />' .
                     'TEXT: ' . $errStr . chr(10) . '<br />' .
                     'LOCATION: ' . $errFile . 
                     ', line ' . $errLine;
    
    echo $error_message;
    
    //прервать дальнейшую работу сценария PHP
    exit;
    
}
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить размеры рабочей области окна в Chrome unclechu Events/DOM/Window 1 13.09.2011 02:37
Объект не поддерживает это свойство или метод load_081112_0953.js 1auto1 Общие вопросы Javascript 1 13.04.2011 22:09
Объект не поддерживает это свойство или метод load_081112_0953.js 1auto1 Internet Explorer 1 13.04.2011 21:59
тег <audio> в Opera, Chrome, Firefox Magneto Javascript под браузер 12 25.11.2010 15:12
если (свойство css == 2) свойство css = 1; funkypublic Events/DOM/Window 1 09.06.2010 17:39