将 jQuery 数组发布到 Django

Posted

技术标签:

【中文标题】将 jQuery 数组发布到 Django【英文标题】:POST jQuery array to Django 【发布时间】:2013-08-05 10:25:30 【问题描述】:

我正在尝试向 Django 发布一个简单数字的 jQuery 数组,但我真的无法让它工作。我需要一点帮助。我收到带有以下错误的 Http 500:

Internal Server Error: /edit_lists/
Traceback (most recent call last):
  File "/home/jabez/.virtualenvs/hackernews/local/lib/python2.7/site-packages/django/core/handlers/base.py", line 187, in get_response
    response = middleware_method(request, response)
  File "/home/jabez/.virtualenvs/hackernews/local/lib/python2.7/site-packages/django/middleware/common.py", line 106, in process_response
    if response.status_code == 404:
AttributeError: 'list' object has no attribute 'status_code'

这是我的代码:

javascript

    $('.btn-group').find('#mark_as_done').on('click', function() 
    var tasks = grab_selected();

    $.ajax(
        type: 'POST',
        url: '/edit_lists/',
        data: 'tasks': tasks,
    );
);

function grab_selected() 
    var tasks = [];
    $('input:checked').each(function() 
        tasks.push(this.id);
    );
    return tasks;

views.py

def edit_lists(request):
tasks = request.POST.getlist('tasks')
return tasks

urls.py

url(r'^edit_lists/$', 'todo.views.edit_lists', name='edit_lists')

【问题讨论】:

【参考方案1】:

通过 ajax 发送时,您可以尝试使用tasks[] 而不是tasks 作为参数。示例:

$('.btn-group').find('#mark_as_done').on('click', function() 
    var tasks = grab_selected();

    $.ajax(
        type: 'POST',
        url: '/edit_lists/',
        data: 'tasks[]': tasks,
    );
);

另一件事是你只是在edit_lists() 视图中返回return tasks,你已经返回一个HttpResponse 实例或使用render 之类的快捷方式:

from django.http import HttpResponse

def edit_lists(request):
    tasks = request.POST.getlist('tasks[]')
    return HttpResponse('Success')

希望对你有帮助,

【讨论】:

它现在工作了:)。我不敢相信答案如此简单。非常感谢! 你怎么从 ajax 发送任务 [] 并且能够通过任务变量检索。我尝试了我的一个例子。我在 django 视图中得到空列表。如果我使用 request.POST.getlist('tasks[]') 并且如果 ajax 中的列表是 ['1','2'] 那么我在 django 视图中得到 [u'1',u'2']。 @Pawan 嗯很确定我在 1.5 年前给出答案时进行了测试,也许当时情况有所不同。那我会更新我的答案,干杯! 即使您通过名为 tasks 的变量发送列表,jQuery POST 的数组也会带有 [] 后缀,因为 php 和一些 Web 框架理解该约定,并在服务器端为您重新构建数组自动地。 Django 不是这样工作的,但是我们可以通过 tasks[] 访问数据 @nidHi 它应该是selected = request.GET.getlist(​‌​‌​'selected[]')(注意括号),因为它是一种方法,而不是字典【参考方案2】:

通过Ajax发送时,您可以尝试使用JSON.stringify()方法而不是tasks作为参数。

这是我控制台上的数组数据

然后通过ajax发送Array数据

$.ajax(
     type: "POST",
     url: "/user/Survey-Design/",
     headers: 
         'Authorization': "Token " + localStorage.access_token
     ,
     data: 
         'arr': JSON.stringify(arr)
     ,
     success: function(result) 
         alert('Data Has been saved')
     
 );

在views.py中:

 def create(self,request):
     array_data = request.POST['arr']
     data = json.loads(array_data)
     print(data)
     return HttpResponse('Success')

最后,在终端上显示 print(data)

【讨论】:

与 AJAZ > Django 完美配合。谢谢。

以上是关于将 jQuery 数组发布到 Django的主要内容,如果未能解决你的问题,请参考以下文章

在 Django POST 请求中使用数组参数

将 Django 中的 json 数据输入到 jquery 函数中

我想知道为啥当我发送一个数组以使用 jquery ajax (django,jquery) 查看时发生错误

django - 如何将图像数组发布到视图

如何使用 if 条件将 django 数组元素添加到 js 数组中

Django:如何在没有''的情况下将数组传输到javascript?