如何通过Ajax发布Django中的数组

Ere*_*rez 32 django ajax jquery python-2.7

当我尝试通过Ajax(jQuery)将数组发送到Django时

JavaScript代码:

new_data = ['a','b','c','d','e'];
$.get('/pythonPage/', {'data': new_data},function(data){});
Run Code Online (Sandbox Code Playgroud)

我试着读取数组:

蟒蛇:

request.GET.get("data[]")
Run Code Online (Sandbox Code Playgroud)

我只得到最后一个数组值:

'e'
Run Code Online (Sandbox Code Playgroud)

我究竟做错了什么?

Yuj*_*ita 75

你正在寻找QueryDictgetlist

request.GET.getlist('data')
request.GET.getlist('data[]')
request.GET.getlist('etc')
Run Code Online (Sandbox Code Playgroud)

https://docs.djangoproject.com/en/2.0/ref/request-response/#django.http.QueryDict.getlist

  • 有一个类似的问题,但使用`POST`方法,其中最适合我的行是`request.POST.getlist('data []')` (41认同)
  • @nidHi你需要`request.GET.getlist('selected []')`而不是`request.GET.getlist ['selected []']` (2认同)

Mic*_*ura 6

很老的问题,但让我向您展示完整的工作代码。(适合新手:)

在您的模板中

data = {
    'pk' : [1,3,5,10]
}

$.post("{% url 'yourUrlName' %}", data, 
    function(response){
        if (response.status == 'ok') {
            // It's all good
            console.log(response)
        } else {
            // Do something with errors
        }
    })
Run Code Online (Sandbox Code Playgroud)

网址.py

urlpatterns = [
    url(r'^yourUrlName/', views.yourUrlName, name='yourUrlName'), #Ajax
]
Run Code Online (Sandbox Code Playgroud)

视图.py

from django.views.decorators.http import require_POST
from django.http import JsonResponse


@require_POST
def yourUrlName(request):
    array = request.POST.getlist('pk[]')

    return JsonResponse({
            'status':'ok',
            'array': array,
        })
Run Code Online (Sandbox Code Playgroud)