Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: AJAX - заполнение select - неправильно работает в Mozilla 5.0
Форумы портала PHP.SU » Клиентская разработка » JavaScript & VBScript » AJAX - заполнение select - неправильно работает в Mozilla 5.0

Страниц (1): [1]
 

1. С.Тарасов - 10 Июня, 2009 - 12:22:20 - перейти к сообщению
В чём может быть причина неправильной работы AJAX при заполнении select в Mozilla 5.0?
Заполняется лишь часть (примерно 150 option), а затем список может быть прерван на середине текста. В других бр.- Опера 9.64, 10.0; Hrome 2.0.163.0; IE 6.0 - работает всё правильно.

Информация по запросу AJAX передаётся с сервера в XML формате.
Если для ответа нужно посмотреть коды могу выложить.
2. Champion - 10 Июня, 2009 - 12:25:13 - перейти к сообщению
http://phpfaq.ru/debug.
Убедись, что вообще php отдает данные нормально сначала.
3. С.Тарасов - 10 Июня, 2009 - 12:57:32 - перейти к сообщению
Что значит нормально, если в других работает. Firebug ошибки не выдаёт.

XML приходит следующего вида:
CODE (text):
скопировать код в буфер обмена
  1. <?xml version='1.0' encoding='Windows-1251'?><response><stotkyda>y1149;  1 Рабфаковский пер.;, ......... </stotkyda><obotkyda></obotkyda></response>
4. Champion - 10 Июня, 2009 - 13:25:31 - перейти к сообщению
С.Тарасов пишет:
XML приходит следующего вида
Ок, будем считать, это ты проверил.
Пришла и как ты ее обрабатываешь?
5. С.Тарасов - 10 Июня, 2009 - 13:39:46 - перейти к сообщению
Данные полученые с сервера - XML_data
CODE (text):
скопировать код в буфер обмена
  1.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  2.         ///////   добавление одной группы записей в select
  3.         //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  4. function opt(XML_data, ob_st, name_obst, name_id_obst, u, otk_kyd, ok_vibor){
  5.  
  6.  try{
  7.      // в массиве arr - строки полученной таблицы
  8.      var arr = XML_data.getElementsByTagName(ob_st)[0].firstChild.data.split(',');
  9.                        
  10.     // добавляем группу - обьекты
  11.    var new_optgroup = document.createElement("optgroup");
  12.    new_optgroup.setAttribute("label", name_obst);
  13.    new_optgroup.setAttribute("id", name_id_obst);
  14.    otk_kyd.appendChild(new_optgroup);
  15.    var last_added_optgroup = document.getElementById(name_id_obst)
  16.                        
  17.     // для каждой строки
  18.    for(var i in arr){
  19.  
  20.       // в массиве val - поля полученной таблицы
  21.      var val = arr[i].split(';');
  22.      if (val[0] && val[1]){
  23.         var new_sub_option = document.createElement("option");
  24.         new_sub_option.setAttribute("id", val[0]+u);
  25.         new_sub_option.setAttribute("value", val[0]);
  26.         if (val[0] && ok_vibor && val[0] == ok_vibor){ new_sub_option.setAttribute("selected", true);}
  27.         last_added_optgroup.appendChild(new_sub_option);
  28.  
  29.         var text = document.createTextNode(val[1]);
  30.         document.getElementById(val[0]+u).appendChild(text);
  31.    }
  32.  }
  33. }catch (e){}
  34. }
  35.  
6. Champion - 10 Июня, 2009 - 13:57:35 - перейти к сообщению
Не вижу я тут ничего страшного... Отладка тебе в руки.
7. С.Тарасов - 10 Июня, 2009 - 14:22:45 - перейти к сообщению
А может быть такое, что имеется, например, в Javascript или в самой Mozile какое-то ограничение на кол-во динамически создаваемых option? Самое неприятное для меня, что программа работает, но в каком-то промежуточном варианте между: работает и не работает.
8. Stierus - 10 Июня, 2009 - 14:31:00 - перейти к сообщению
первое, что я проверил бы - это целиком ли подгружается xml ( выводить только последние записи, например, пропуская первые 100 option - способов проверить достаточно). Если проблема именно в том, что файл не подгружается - стоит попробовать изменить логику приложения, разбив на несколько файлов или там вкладки делать (выпадающее меню из 150 элементов - это, как минимум, не удобно). Если же файл подгружается целиком - то уже смотрел бы, яваскрипт по каким-то причинам стопорится на середине (если да - тут либо с памятью проблемы, либо доходит до какого-то элемента, выбивающегося из общих правил (ну там название недопустимое, содержит внутри себя <> или ещё что-то)) или что вообще происходит.

Вобщем тут исключительно паяльник в руки и шаг за шагом следить, все ли идёт по плану :

получить полностью файл -> пройти по всему файлу подряд, анализируя содержимое -> внести изменения в DOM

ps
Не слышал про ограничение на количество элементов - сильно сомневаюсь, что такое есть.
9. С.Тарасов - 10 Июня, 2009 - 15:29:19 - перейти к сообщению
Спасибо за вариант - начать не с 0. Попробовал
CODE (text):
скопировать код в буфер обмена
  1. for(var i=130; i<arr.length; i++){...


В результате тормозит на томже названии, что и раньше, т.е. очевидно что проблема не с памятью в смысле ограничений.
Не хочет двигаться дальше
Цитата:
ул. Бахрушина
, хотя ничем эта запись в XML документе не отличается:
CODE (text):
скопировать код в буфер обмена
  1. .....Бауманская ул.;,y164;Бахрушина ул.;,y165;Башиловская ул.;,......


Если начинать за этой записью (скажем с i=200) , то вообще не вносит ни одной записи. Опять же только в mozile.

Засада. Растерялся

 

Powered by ExBB FM 1.0 RC1