Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Ajax + json 
:(
    Опции темы
SneG0K
Дата 18.7.2009, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Код

function onAjaxError(xhr, status){
            showLoading(false)
            var errinfo = { errcode: status }
            if (xhr.status != 200) {
                errinfo.message = xhr.statusText
            } else {
                errinfo.message = 'Некорректные данные с сервера'
            }
            onLoadError(errinfo)
        }

$.ajax({
            url: url,
            /*begin important*/
            data: node.id + '?id=' + node.id,
            /*end important*/
            dataType: "json",
            success: onSuccess,
            error: onAjaxError,
            cache: false
        })

Код

echo "[
  { id: 1, title: 'Node 1', isFolder: 1},
  { id: 2, title: 'Node 2', isFolder: 1},
  { id: 3, title: 'Node 3', isFolder: 0}
]";


Постоянно вылетает ошибка parseerror. Хотя вроде формат правильный. В чем может быть загвоздка?
PM WWW Skype   Вверх
ksnk
Дата 18.7.2009, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

Репутация: 84
Всего: 386



json_encode на подходящий php массив выдает вот такое
Код

[{"id":1,"title":"Node 1","isFolder":1},{"id":2,"title":"Node 2","isFolder":1},{"id":3,"title":"Node 3","isFolder":0}]

Может скрипту не нравится перевод строки? Кавычки тут, вроде бы не особо нужны...


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
SneG0K
Дата 18.7.2009, 16:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



ksnk, хм.. Все равно пареррор

Добавлено через 2 минуты и 44 секунды
Код

function tree(id, url) {
    var element = document.getElementById(id)

    function hasClass(elem, className) {
        return new RegExp("(^|\\s)"+className+"(\\s|$)").test(elem.className)
    }

    function toggleNode(node) {
        var newClass = hasClass(node, 'ExpandOpen') ? 'ExpandClosed' : 'ExpandOpen'
        var re =  /(^|\s)(ExpandOpen|ExpandClosed)(\s|$)/
        node.className = node.className.replace(re, '$1'+newClass+'$3')
    }

    function load(node) {

        function showLoading(on) {
            var expand = node.getElementsByTagName('DIV')[0]
            expand.className = on ? 'ExpandLoading' : 'Expand'
        }


        function onSuccess(data) {
            if (!data.errcode) {
                onLoaded(data)
                showLoading(false)
            } else {
                showLoading(false)
                onLoadError(data)
            }
        }


        function onAjaxError(xhr, status){
            showLoading(false)
            var errinfo = { errcode: status }
            if (xhr.status != 200) {
                errinfo.message = xhr.statusText
            } else {
                errinfo.message = 'Некорректные данные с сервера'
            }
            onLoadError(errinfo)
        }


        function onLoaded(data) {
            for(var i=0; i<data.length; i++) {
                var child = data[i]
 
                var li = document.createElement('LI')
                li.className = "Node Expand" + (child.isFolder ? 'Closed' : 'Leaf')
                if (i == data.length-1) li.className += ' IsLast'
                li.id = child.id
                li.innerHTML = '<div class="Expand"></div><div class="Content">'+child.title+'</div>'
                if (child.isFolder) {
                    li.innerHTML += '<ul class="Container"></ul>'
                }
                node.getElementsByTagName('UL')[0].appendChild(li)
            }    
            node.isLoaded = true
            toggleNode(node)
        }

        function onLoadError(error) {
            var msg = "Ошибка: "+error.errcode
            if (error.message) msg = msg + ': '+error.message
            alert(msg)
        }


        showLoading(true)


        $.ajax({
            url: url,
            /*begin important*/
            data: node.id + '?id=' + node.id,
            /*end important*/
            dataType: "json",
            success: onSuccess,
            error: onAjaxError,
            cache: false
        })
    }

    element.onclick = function(event) {
        event = event || window.event
        var clickedElem = event.target || event.srcElement

        if (!hasClass(clickedElem, 'Expand')) {
            return 
        }

        var node = clickedElem.parentNode
        if (hasClass(node, 'ExpandLeaf')) {
            return 
        }

        if (node.isLoaded || node.getElementsByTagName('LI').length) {
            toggleNode(node)
            return
        }


        if (node.getElementsByTagName('LI').length) {
            toggleNode(node)
            return
        }

        load(node)
    }
}

Что-то не могу догнать, как посмотреть то, что прийдет скрипту. Как скрипт это воспримет. 
PM WWW Skype   Вверх
SneG0K
Дата 18.7.2009, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Может хидер какой специальный надо?

Добавлено через 7 минут и 38 секунд
Разобрался как посмотреть входящие данные и понял, что там еще есть и вывод смарти. В общем проблема решена
PM WWW Skype   Вверх
IDVsbruck
Дата 19.7.2009, 21:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 778
Регистрация: 12.11.2006

Репутация: 8
Всего: 22



Да, по идее хидер нужен. У меня без установки setContentType("text/html; charset=utf-8") тоже была ошибка парсинга.

Вижу по коду, что очень нерациональное использование библиотек - jQuery используется только для получения данных, а в остальном чистый код - не совсем логично ИМХО.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0512 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.