我已经查看了与此相关的其他问题,但尚未找到能够解答我(第一个!)问题的问题:
我正在序列化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响应 - 并且代码在控制台中工作 - 意味着警报已处理并显示,是否有我忽略的东西?
答案 0 :(得分:0)
你得到“Uncaught TypeError:无法读取未定义的属性'first_name'这一事实。”建议不在数据上定义字段,但实际上是在数组中获取对象。
一个想法可能是打印数组对象的控制台声明。
只需添加:
console.log(data[i])
直接在每个函数内部
原因可能与this
有关