jQuery, динамические селекты + Json (ajax) = баги в ИЕ и опере. Помогите разобраться

BeliyFenix

Новичок
jQuery, динамические селекты + Json (ajax) = баги в ИЕ и опере. Помогите разобраться

Сразу скажу с Ajax'ом знаком весьма недавно, вчера решил освоить фреймворк jQuery, ибо стало нужно сделать на одном проектике несколько фич.

На данный момент есть код который через Json запрашивает данные на сервере и генерит полученные данные в options'ы заданного select. Но вот незадача, все прекрасно работает в Firefox'e 2, и совсем не работает в Explorer 6 и Opera 9.

Кодировку в utf-8 c заголовками в рнр скрипте ставить пробовал, не помогло.

Помогите разобраться в чем тычка.

Javascript:
PHP:
var path				= '/ajax/get_related_structure.php';// путь до вызываемого скрипта
var element_name		= 'lvl';							// базовое имя элементов

// Запускаем инициализацию всех обработчиков после загрузки
$(document).ready(function(){
	
	var num = 1;
	var pid = 0;
	var count = 0;
	
	$.getJSON(path+"?id=" + pid,
	function(data)
	{
		$.each(data.items, function(i,item)
		{
			$("<option>").attr("value", item.id).text(item.name).appendTo("#"+element_name+num);
		});
	});
});
Html код:
PHP:
<select name="lvl1_id" id="lvl1" style="width: 150px"></select>
Вот ссылки на работающие примеры моего кода:
http://www.smailer.ru/totalrating/test_ajax.html
http://www.smailer.ru/totalrating/test_ajax2.html
Ссылка на выдачу РНР скрипта

В примерах в полях встречаются знаки вопроса, собственно сорри было лень с кодировкой БД разбираться (отдается все в utf-8 а залил в cp1251).

-~{}~ 10.09.08 03:20:

Блин и еще я не понимаю в чем может быть дело. Для тестов сделал страницу с одним широко распространненым примером JSON запроса и выборки фоток вот с этой выдачи
http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?.

Положил вот сюда: http://www.smailer.ru/totalrating/test_ajax3.html.

Так вот, все равно мой пример не срабатывает в ИЕ, в мозиле все гуд. Пробовал в своем пример происать обращение по вышеприведенному адресу и вывести сурсы картинок, все гуд.

Header'ы прописал у своего скрипта такие же как и те которые выдает корректный пример, кодировку поставил utf-8 точно.

Адрес обращения просто в кавычках задавать пробовал.

Что еще может сработать? В чем может быть загвоздка?

-~{}~ 10.09.08 13:18:

Неужели никто не сталкивался???
 

Ironfoundersson

Новичок
у тебя не валидная отдача с сервера.

пример валидной

Код:
({
    "items":[
             {"id":"6","name":"Shoping","selected":false},
             {"id":"2","name":"air","selected":false},
             {"id":"1","name":"auto","selected":false},
             {"id":"5","name":"events","selected":false},
             {"id":"3","name":"moto","selected":false},
             {"id":"4","name":"rest","selected":false}
            ]
 })
 

BeliyFenix

Новичок
Странно О_о, как то даже не думал что выдача вытянутая в строку является невалидная, особенно если учесть что в мозиле все гуд.
Спасибо за совет, сейчас попробую ее раскидать как надо.

-~{}~ 10.09.08 16:04:

Не чувак ты не прав...
Все выверил с точностью до запятой и таба, тычка не в этом.
 

Ironfoundersson

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

BeliyFenix

Новичок
1. Сейчас скрипт выдает все точь в точ, копипастил из выдачи, все запятые на месте.
Код:
({
	"items":[
		{"id":"6","name":"Shoping","selected":false},
		{"id":"2","name":"air","selected":false},
		{"id":"1","name":"auto","selected":false},
		{"id":"5","name":"events","selected":false},
		{"id":"3","name":"moto","selected":false},
		{"id":"4","name":"rest","selected":false}
		]
})
В какой строчке не хватает запятой тогда?


2. Я все равно не понимаю, даже если там и была ошибка, почему мозилла все отрабатывала нормально. Мне кажется что все таки собака зарыта не в этом месте.

3. Пааап, а тебе сколько лет то???? =)
 

Ironfoundersson

Новичок
1) теперь будет работать.
2) у тебя было
{"id":"4","name":"rest","selected":false,}
а надо
{"id":"4","name":"rest","selected":false}
 

BeliyFenix

Новичок
Дык это я сразу после второго поста поправил, сам посмотри выдачу...
По идее эта запятая вообще не должна влиять на восприятие кода скриптами, но чем черт не шутит, бывает что и из-за запятой баги бывают, но это не тот случай.
В ИЕ всеравно не отрабатывает.
 

dimagolov

Новичок
а зачем у вас имя свойства это строка? я всегда использую идентификатор для этого...
а запятые в конце массива это в php можно, но не в JS
 

Ironfoundersson

Новичок
Автор оригинала: BeliyFenix
Дык это я сразу после второго поста поправил, сам посмотри выдачу...
код взят с выдачи и у него были убраны мной запятые.

По идее эта запятая вообще не должна влиять на восприятие кода скриптами, но чем черт не шутит, бывает что и из-за запятой баги бывают, но это не тот случай.
В ИЕ всеравно не отрабатывает.
кеш. я тут проверяю http://www.smailer.ru/totalrating/test_ajax2.html

---
ps
я дважды подумаю перед тем как комунибуть помочь.
 

BeliyFenix

Новичок
Ну в данном примере просто по имени поля в БД выборка идет, а уже в JS скрипте те или иные элементы данного (объекта/массива пока не до конца понимаю всей сути) собираются в то что мне нужно.

На данный момент даже с устранением лишних запятых выборка в ОСЛИКЕ не производится, даже алерт не вылетает включенный в обработку. В огненной лисе по прежнему все работает так, как собственно и надо...

Есть у кого нибудь еще какие предположения? Ребят ну просто жизнено важно разобраться в этих затыках... буду очень признателен...

-~{}~ 10.09.08 18:23:

ps
я дважды подумаю перед тем как комунибуть помочь.
:confused: Странно, а почему так? По моему весьма корректное обсуждение вопроса происходит.

-~{}~ 10.09.08 18:24:

Народ или если вдруг кто знает где можно такую же готовую тычку скачать как тут http://www.smailer.ru/totalrating/test_ajax.html (пока работает тока в Firefox), подскажите ааааа....
 

dimagolov

Новичок
BeliyFenix, разберись с областями видимости. потому что у меня тупо next_num undefined в строчке (догадайся которой :) )
PHP:
disalow_selects ( count_lvls, next_num );
к запросом это имеет слабое отношение, чисто copy-paste error
 

BeliyFenix

Новичок
Это ты видимо зашел в 3 файл, там я уже намострячил, тестил.
Ты как раз напоролся на библиотеку из полной версии заготовки файле 1. В этом точно затычек нет, а если и есть то они явно сейчас незначительны для данного вопроса.

Это просто функция сокрытия и вычищения ненужных селектов задаваемой группы.

А насчет копипаста не надо, я сам писал весь плагинок, целый день втыкал во все пока сделал. Тока с ИЕ не понятки.

А вообще непонятно почему даже одно поле при загрузке страницы не отрабатывается вот тут
http://www.smailer.ru/totalrating/test_ajax2.html Затычка именно в getJSON. То ли в отсылке запроса, то ли получении данных.

При этом если запросить с сервера примера (http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?) из мануалов jquery, то все получается вывести. Я короче кучу вариаций уже перепробовал не могу разобраться.
 

dimagolov

Новичок
BeliyFenix, ошибка что я описал в http://www.smailer.ru/totalrating/test_ajax.html, там два куска кода похожих, как я понял ты один из другого скопипастил.

http://www.smailer.ru/totalrating/test_ajax2.html. вообще 404
 

BeliyFenix

Новичок
404 ибо точка на конце =)

а первый вариант это полная версия того что писал и неоконченная по причине обнаружения глюка. Пока она меня устраивает в том виде в котором я ее вижу в FF, но ИЕ как всегда отличился =)

http://www.smailer.ru/totalrating/test_ajax2.html
 

dimagolov

Новичок
BeliyFenix, в чем вопрос? http://www.smailer.ru/totalrating/test_ajax2.html работает идентично и без ошибок и в ФФ и в ИЕ
 

BeliyFenix

Новичок
Ниче не понимаю, народ у кого в ИЕ 6 на страничке список подгружается отпишите плз в личку или тут.

Ниче не понимаю, тока что вычистил кэш, скинул линки 2-м товарищам, сказали список пустой, я ниче не понимаю О_о
 

yantar

Новичок
Сегодня столкнулся с той же проблемой.
Все отлично работает в 3 браузерах - опера, сафари и файрфокс, а в эксплорере - нет.
Но у меня с сервера приходит ХМЛка.
вот кусок кода

Код:
complete: function (data){
	$("lang", data.responseText).each(function(){
                       alert ('hi');
});
Так вот в єксплорер мы в этот each не попадаем и поэтому селект пустой.


З.Ы. Здесь в ИЕ 6.0 селект пустой (а в ИЕ 7.0 - заполненный)
http://www.smailer.ru/totalrating/test_ajax2.html

-~{}~ 12.09.08 14:19:

Разве, что вариант - єто формировать список option на стороне сервера, а здесь уже только вставлять в селект, но как то криво выходит

Интересно, что у объекта data есть только свойство responseText, а свойства responseXML нет

-~{}~ 15.09.08 19:03:

Да и такая конструкция в ИЕ не работает.
Код:
var file_size = $("download",data.responseText).attr("size");
Сервер возвращает
Код:
<?xml version = "1.0"?><downloads><download name = "ICENI_Home_02.gif" size = "1.33 KB" /></downloads>
-~{}~ 16.09.08 12:29:

Ура, разобрался, проблема была на сервере, дело в том, что в єтой ЦМС после моего хидера
Код:
header("Content-type:text/xml");
шел еще левый хидер
Код:
header("Content-type: text/html");
И в файрфоксе работало так, а в ИЕ 6.0 не работало.
 
Сверху