How to get an array in Django posted via Ajax

AjaxDjangoJqueryPython 2.7

Ajax Problem Overview


When I try to send an array to Django via Ajax (jQuery)

JavaScript code:

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

and I try to read the array:

Python:

request.GET.get("data[]")

I get only the last array value:

'e'

What am I doing wrong?

Ajax Solutions


Solution 1 - Ajax

You're looking for the QueryDict's getlist

request.GET.getlist('data')
request.GET.getlist('data[]')
request.GET.getlist('etc')

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

Solution 2 - Ajax

Quite old question but let me show you full working code for this. (Good for newbie :)

In your template

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
    	}
    })

urls.py

urlpatterns = [
	url(r'^yourUrlName/', views.yourUrlName, name='yourUrlName'), #Ajax
]

views.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,
		})

Solution 3 - Ajax

Just use request.GET.getlist('data[]')

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionErezView Question on Stackoverflow
Solution 1 - AjaxYuji 'Tomita' TomitaView Answer on Stackoverflow
Solution 2 - AjaxMichael StachuraView Answer on Stackoverflow
Solution 3 - Ajaxuser10960338View Answer on Stackoverflow