Django序列化json在控制台中工作,但不在带有ajax请求的页面中

时间:2011-07-23 21:45:03

标签: jquery ajax django json each

我已经查看了与此相关的其他问题,但尚未找到能够解答我(第一个!)问题的问题:

我正在序列化django视图并使用ajax(jquery)将其发送到服务器。我收到序列化数据(通过警报测试并收到JSON数据,200 ok响应),但我无法获得以下成功的工作:

$('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),但无法在页面上运行。我收到以下错误:
未捕获的TypeError:无法读取未定义的属性“first_name”。

我已经尝试过控制台来查看如何访问javascript地图/字典项,并且在输入以下内容时能够获取值,将 i 替换为实际数字:     数据[数字] .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 :(得分:0)

你得到“Uncaught TypeError:无法读取未定义的属性'first_name'这一事实。”建议不在数据上定义字段,但实际上是在数组中获取对象。

一个想法可能是打印数组对象的控制台声明。

只需添加:

console.log(data[i])

直接在每个函数内部

原因可能与this

有关