Форум программистов, компьютерный форум, киберфорум
JavaScript
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
52 / 52 / 4
Регистрация: 10.11.2010
Сообщений: 171

Не могу собрать данные из XML

27.12.2010, 17:48. Показов 1619. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Возникла проблема.
С помощью Ajax'a пытаюсь сделать проверку данных, перед занесением их в БД. Данные проверяются с помощью PHP скрипта. В начале скрипта создаю массив $errors. Если какое либо из полей пользователем было заполнено неправильно, в массив добавляется элемент. Далее, пробегаюсь по массиву и создаю XML документ. Структура такова:

XML
1
2
3
4
5
6
<response>
<error>Ошибка 1</error>
<error>Ошибка 2</error>
<error>Ошибка 3</error>
...
</response>
В FF, Opere, Chrome работает нормально. В IE не работает. Включил Script Debugging, пишет, что xml_root - null.

Собственно коды:
Это скрипт, который генерирует XML структуру:
PHP код:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
  $errors = array();
  $reg_login = $_GET["reg_login"];
  $reg_password = $_GET["reg_password"];
  $reg_password2 = $_GET["reg_password2"];
  $reg_mail = $_GET["reg_mail"];
  $reg_sex = $_GET["reg_sex"];
  $reg_captcha = $_GET["reg_captcha"];
  
  if (@!$reg_login)
    $errors[] = "Incorrect Login!";
  if (@!$reg_password)
    $errors[] = "Incorrect Password!";
  if (@!$reg_password2)
    $errors[] = "Incorrect Password2!";
  if (@!$reg_mail)
    $errors[] = "Incorrect mail!";
  if (@!$reg_sex)
    $errors[] = "Incorrect Sex!";
  if (@!$reg_captcha)
    $errors[] = "Incorrect Captcha";
    
  Header("Content-Type: text/xml");
?>
<?xml version="1.0" encoding="UTF8" standalone="yes" ?>
  <response>
    <?php
      if (count($errors) != 0)
      {
        foreach ($errors as $error)
        {
          echo "<error>".$error."</error>";
        }
      }
    ?>
  </response>
Функция, которая посылает данные скрипту:
Код:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
function register_me()
{
  if (xml_http)
  {
        regis_login = document.getElementById("reg_login").value;
    regis_password = document.getElementById("reg_password").value;
    regis_password2 = document.getElementById("reg_password2").value;
    regis_mail = document.getElementById("reg_mail").value;
    regis_sex = document.getElementById("sex").value;
    regis_captcha = document.getElementById("captcha").value;
    
    xml_http.open("GET", "pages/check_reg.php?reg_login="+regis_login+"&reg_password="+regis_password, true);
        xml_http.onreadystatechange = reg_result;
    xml_http.send(null);
  }
}
И функция, которая пытается работать с XML структурой:
Код:

JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function reg_result()
{
  if (xml_http.readyState == 4 && xml_http.status == 200)
  {
    xml_response = xml_http.responseXML;
    xml_root = xml_response.documentElement;
    xml_errors = xml_root.getElementsByTagName("error");
    if (xml_errors.length != 0)
    {
      display = "";
      for (i=0; i<xml_errors.length; i++)
      {
        xml_error = xml_errors.item(i).firstChild.data;
        display += "<br>"+xml_error;
      }
    }
  }
}
В этом месте:
xml_errors = xml_root.getElementsByTagName("error");
IE ругается, говорит, что xml_root у меня NULL.

Помогите, пожалуйста, разобраться. Собственно в чем может быть проблема? В других браузерах ведь работает. Я так понимаю, что эта проблема на стороне клиента? Или она может быть на стороне сервера? Как решить?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
27.12.2010, 17:48
Ответы с готовыми решениями:

Не могу собрать данные из нескольких ячеек в одну
Access 2003 SP3 Здравствуйте, пытаюсь доделать отчет. Весь измучался уже. Не могу собрать данные в 22 столбце в одну ячейку по адресу....

Не могу получить данные из XML файла.
Скажите пожалуйста что тут не так? не могу получить данные из XML файла. xml &lt;xml version=&quot;1.0&quot;...

не могу вывести данные xml curl php
Доброго времени суток, уважаемые знатоки помогите пожалуйста, в php я очень плохо разбираюсь точнее только начинаю изучать. Не могу...

7
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
27.12.2010, 18:30
А ты JSON не пробовал? Помоему так проще будет. И не надо сто раз конвентировать масивы из/в XML

На пхп есть ф-я encodeJSON кажется так, на ЖС есть функция eval(data)

PHP
1
2
//зделал масив потом
echo encodeJSON($errors);
JavaScript
1
2
//получил строку-закодированный масив "data" через ajax
var errors = eval(data) // вот тебе масив ошибок, зачем XML ???
0
52 / 52 / 4
Регистрация: 10.11.2010
Сообщений: 171
27.12.2010, 18:50  [ТС]
Code
1
На пхп есть ф-я encodeJSON кажется так, на ЖС есть функция eval(data)
Прежде чем использовать какие-либо упрощающие решения, я хотел бы разобраться в механизме (как это работает изнутри)

Кстати, заметил еще кое-что. Если сохранить файлик в формате .xml с готовой структурой, то все работает. А если файл генерируется посредством PHP, то не работает. В чем же проблема?
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
27.12.2010, 19:15
Поставь точки отлова данный в скрипте:
JavaScript
1
console.log( some_data )
и смотри за значением переменных в разных браузерах, на ФФ можешь посмотреть на данный, который отправлены - получены через аякс.
0
52 / 52 / 4
Регистрация: 10.11.2010
Сообщений: 171
27.12.2010, 19:46  [ТС]
Цитата Сообщение от outoftime Посмотреть сообщение
Поставь точки отлова данный в скрипте:
JavaScript
1
console.log( some_data )
и смотри за значением переменных в разных браузерах, на ФФ можешь посмотреть на данный, который отправлены - получены через аякс.
Можете еще раз? По-подробней =)
0
║XLR8║
 Аватар для outoftime
1212 / 909 / 270
Регистрация: 25.07.2009
Сообщений: 4,360
Записей в блоге: 5
27.12.2010, 19:52
Пользуйся console.log( some_data ) как alert( some_data ) для вывода в консоль промежуточных значений выполнение js скрипта.
0
 Аватар для Vovan-VE
13210 / 6599 / 1041
Регистрация: 10.01.2008
Сообщений: 15,069
28.12.2010, 15:54
Цитата Сообщение от LinelWorld Посмотреть сообщение
А если файл генерируется посредством PHP, то не работает. В чем же проблема?
Возможно, в которких тегах PHP <? , которые он видит в "<?xml" ? Вы пробовали на PHP скрипт через адресную строку данные передавать?
Цитата Сообщение от LinelWorld Посмотреть сообщение
<?xml version="1.0" encoding="UTF8"
UTF-8
0
52 / 52 / 4
Регистрация: 10.11.2010
Сообщений: 171
29.12.2010, 08:36  [ТС]
Спасибо всем отписавшимся, проблема решена. Дело было вот в чем. Пользуюсь редактором Notepad++, сохранил файл со скриптом в кодировке UTF-8. А там оказывается в начале добавляются какие-то символы. Пользователю они не видны, а вот заголовок отправить не дают:
PHP
1
 Header("Content-Type: text/xml");
В итоге, PHP генерирует ошибку, появляются лишние символы, в итоге XML файл становится некорректным. Сохранил файл в UTF-8 без BOM и проблема испарилась.

Ну и второе:
UTF-8
Действительно, не заметил. В различных браузерах прокатывало, а вот ИЕ не понял всю строчку:
PHP
1
<?xml version="1.0" encoding="UTF8" standalone="yes" ?>
из-за неправильно указанной кодировки. Спасибо всем, кто пытался помочь =)
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
29.12.2010, 08:36
Помогаю со студенческими работами здесь

Как обновить данные в файле xml на основе другого xml?
Добрый день! Мне необходимо разработать XSLT преобразование, которое будет обновлять данные в файле formats.xml (узлы name, shortName,...

Как добавить данные в xml-файл, используя пространство имен System.Xml.Linq
Допустим, есть файл xml, я его взял из этого треда: https://www.cyberforum.ru/vb-net/thread335207.html &lt;?xml version=&quot;1.0&quot;...

[XML] Как отсортировать данные в XML?
Друзья привет. В ранее созданой теме приводил пример .xml файла. Подскажите если мне нужно отсортировать такой хмл по File или Date,...

Подскажите как из xml собрать docx
Здравствуйте, помогите разобраться... Как можно собрать из xml документов word? docx - это ведь zip-архив, например если я изменяю...

Собрать все xml файлы в один и открыть в excel
Добрый день! Подскажите , Собрать все xml файлы в один , и можно ли этот файл открыть в excel в читаемом формате?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! в-строка - входное арифметическое выражение в инфиксной(обычной). . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru