Django сериализованный JSON работает в консоли, но не на странице с запросом AJAX - PullRequest
1 голос
/ 24 июля 2011

Я смотрел на другие вопросы, связанные с этим, но еще не нашел что-то, что отвечает на мой (первый!) Вопрос:

Я сериализирую представление django и отправляю его на сервер сАякс (JQuery).Я получаю сериализованные данные (проверил их с предупреждением и получил данные JSON, 200 ok reponse), но не могу получить следующее для успешной работы:

$('div#nextSet' + currentLetter).click(function(){
      var output = '';
            $.ajax({
                url: 'path/to/django/view',
                data: {'data':sentToServer},
                datatype: 'json',
                error: function(xhr_data) {
                    display_error();
                },
                success: function(data) {
                    $.each(data, function(i){
                        var firstName =data[i].fields.first_name;
                        var lastName = data[i].fields.last_name;
                        var portrait = data[i].fields.portrait;
                        var output = '<ul><li>' + firstName + ' ' + lastName + '</li>';
                        output += '<li><img src="' + portrait + '" /></li></ul>';
                        alert(output);
                    });
                }
            });
        });

Этот код работает в Google Chrome и Firefox.в консоли (предупреждение показывает образец HTML), но не удается запустить на странице.Я получаю следующую ошибку:
Uncaught TypeError: Невозможно прочитать свойство 'first_name' из undefined.

Я попробовал консоль, чтобы увидеть, как получить доступ к элементам карты / словаря javascript, и могуполучить значение при вводе следующего, заменив i на фактическое число: data [number] .fields.first_name Значение отображается в консоли, и сообщение об ошибке не появляется.

Этообразец данных, возвращаемых из представления django для одного элемента: var data = [{"pk": 8, "model": "app.model", "fields": {"Portrait":
"this/is/the/photo/path.png "," first_name ":" First "," last_name ":" LastName "}},].

Все это встроено в код успеха, ничего не значащийдолжен быть выполнен (?), если обратный вызов не доступен.Таким образом, если данные присутствуют - так как оповещение (данные) работает, и я получаю ответ 200 ok от сервера - и код работает в консоли - то есть оповещение обрабатывается и появляется, есть ли что-то, что я пропускаю

1 Ответ

0 голосов
/ 24 июля 2011

Факт, что вы получаете "Uncaught TypeError: Невозможно прочитать свойство 'first_name' из undefined."предполагает, что поле не определено в данных, но что вы фактически получаете объект в массиве.

Одной из идей может быть печать консольной статистики объекта массива.

Просто добавьте:

console.log(data[i])

непосредственно внутри каждой функции

Причина может быть связана с this

...