JS AJAX调用Django后端时显示JSON数组出现未定义变量问题
问题解决:AJAX渲染JSON数组时变量未定义
错误原因
你用for (var model in response.models_to_return)遍历数组时,model获取的是数组的索引值(比如"0"、"1"这类字符串),而非数组里的具体对象。所以当你尝试访问model.user_id时,会提示变量未定义——因为索引字符串不存在这些属性。
修复方案
以下是三种可行的修改方式:
方式1:使用for...of遍历数组
直接遍历数组中的每个对象,代码直观易读:
success: function go(response){ console.log(response); $("#display").empty(); // 改用for...of遍历数组元素 for (var model of response.models_to_return) { var temp="<div class='container darker'><b>"+ model.user_id +"</b><p>"+ model.room +"</p><span class='time-left'>"+ model.datetime +"</span></div>"; $("#display").append(temp); } }
方式2:使用数组forEach方法
符合现代JavaScript风格的写法:
success: function go(response){ console.log(response); $("#display").empty(); response.models_to_return.forEach(function(model){ var temp="<div class='container darker'><b>"+ model.user_id +"</b><p>"+ model.room +"</p><span class='time-left'>"+ model.datetime +"</span></div>"; $("#display").append(temp); }); }
方式3:传统for循环(通过索引访问)
如果需要兼容旧运行环境,可采用这种方式:
success: function go(response){ console.log(response); $("#display").empty(); var models = response.models_to_return; // 遍历索引,通过索引获取数组对象 for (var i = 0; i < models.length; i++) { var model = models[i]; var temp="<div class='container darker'><b>"+ model.user_id +"</b><p>"+ model.room +"</p><span class='time-left'>"+ model.datetime +"</span></div>"; $("#display").append(temp); } }
额外提示
- 确保Django视图返回的
models_to_return是标准JSON数组,避免格式异常 - 可在控制台打印
model的值(如console.log(model)),快速排查遍历逻辑问题
内容的提问来源于stack exchange,提问作者Marc Kch
相关产品推荐
相关产品推荐

