我正在使用 AJAX 调用某个 url,传入键/值对数据。
$.ajax({
url: 'http://127.0.0.1:8000/tool/page4/add_team/' + String(str) + '/',
type: 'POST',
dataType: 'html',
data: {
'alerts_array' : data_array,
//'csrfmiddlewaretoken' : document.getElementsByName('csrfmiddlewaretoken')[0].value,
},
async: false,
success: function(data){
$('#target').html(data);
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
alert("Status: " + textStatus); alert("Error: " + errorThrown);
}
});
这是我 View 中的函数,它正在调用:
@csrf_exempt
def displayAlerts(request, team):
t = (team, )
iterator = itertools.count()
query = "SELECT * FROM tool_alert_template WHERE team = ?"
all_alert = All_alerts.objects.all()
#a = "SELECT * FROM tool_sys_team WHERE sys_team "
new_list = []
for b in Alert_template.objects.raw(query, t):
new_list = b.convertAlert
if not new_list: #if new_list is still undefined because Sys_team.objects.raw returns nothing,
#then initialize it as unknown
new_list = ["Unknown","Unknown","Unknown"]
if request.method == 'POST':
new_list = []
default = ["Unknown","Unknown","Unknown"]
temp = request.POST.get('alerts_array', default)
#new_list = request.POST['alerts_array']
for a in temp:
new_list.append(a)
return render_to_response('table_alerts.html',
{'alerts_array' : new_list, 'team_name' : team, 'iterator':iterator, 'all_array':all_alert }
)
作为前言,当我加载页面时,在发送 AJAX 请求之前,我有另一个 Ajax 请求(未显示),该请求使用我的 All_alerts 和 Alert_template 对象的表加载页面。仅当用户从表中选择一个选项时,才会调用上面的 Ajax 请求。因为我不希望发生这种情况时刷新页面,所以我为两个 Ajax 请求调用相同的函数,并且只是重新呈现该 HTML block 。不幸的是,在我看来,当我调用 temp = request.POST.get('alerts_array',default)
时,它似乎找不到alerts_array,因为默认值一直显示在这一页。我可能可以在客户端完成所有这些工作,但我觉得我已经非常接近解决这个问题了。任何帮助表示赞赏!非常感谢。
最佳答案
心情很郁闷。我所要做的就是:
new_list = request.POST.getlist("alerts_array[]", None)
如果您通过 ajax 传递列表,则可以通过 getlist 和 key[] 访问该数组
关于javascript - 发布的 Ajax 发送的数据似乎没有出现在 Django View 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25316577/