Django Ajax'GET'

newbie here. I am trying to get some data from my database using ajax.

In my views.py,

def getEvents(request):
    eventList = Events.objects.all()
    events=[]
    for event in eventList:
        events.append({"name": event.name, "start": event.start, "end": event.end})
    return HttpResponse(events, content_type="application/json")

Note that Events is the model that I am trying to parse. After I collect the data from this model, I want to return it to my template using the following ajax code:

            $.ajax({
                url: 'getEvents/',
                datatype: 'json',
                type: 'GET',
                sucess: function(data) {
                    alert(data.name);
                }
            });

In my urls.py:

url(r'^getEvents/', views.getEvents, name='getEvents'),

However, I think I am doing something wrong because it doesn't work. I have been stuck on this for hours...Any ideas?

EDIT:

Okay. When I append the getEvents to the url, I do see all the database objects together in a dict but it seems my ajax is not working. How do I parse this data? The data is in the form:

[{"start": "2017-02-06", "end": "2017-02-07", "name": "Capstone Meeting"},
{"start": "2017-02-07T0:00", "end": "2017-02-08", "name": "Capstone"}, 
{"start": "2017-01-31T0:00", "end": "2017-02-01", "name": "dasdsd"}, 
{"start": "2017-01-31", "end": "2017-02-01", "name": "hjb"}]

Here is what I have so far...

            $.ajax({
                url: 'getEvents/',
                datatype: 'json',
                type: 'GET',
                sucess: function(data) {
                    $.each(data, function(index, element) {
                        $('body').append($('<div>', {
                            text: element.name
                        }));
                    });
                }
            });

One of your errors is being caused by not using a JsonResponse in your view instead of an HttpResponse. Here’s how to fix that issue:

from django.http import JsonResponse

def getEvents(request):
    eventList = Events.objects.all()
    events=[]
    for event in eventList:
        events.append({"name": event.name, "start": event.start, "end": event.end})
    return JsonResponse(events)

From the docs, the JsonResponse is

An HttpResponse subclass that helps to create a JSON-encoded response.

The reason that your regular HttpResponse didn’t work, is because you have to manually serialize the data to JSON when using an HttpResponse, e.g., something like:

import json

response_data = json.dumps(events)
return HttpResponse(response_data, content_type="application/json")

Otherwise, I think what will happen is that you will get a call to __repr__ on the events list which will get you python ast serialized data and not JSON serialized data.

First of all, there's a typo of your sucess function, it should be success.

Secondly, JSON response should be a dict object rather than a list, if you really want to get a JSON array response anyway, then you have to specify safe=False when you serializing the data by using JsonResponse(events, safe=False), otherwise you'll get a TypeError like TypeError: In order to allow non-dict objects to be serialized set the safe parameter to False.

So the code sample should be:

def getEvents(request):
    eventList = Events.objects.all().values("name", "start", "end")
    return JsonResponse({"events": eventList})

And for frontend:

        $.ajax({
            url: 'getEvents/',
            datatype: 'json',
            type: 'GET',
            success: function(data) {
                $.each(data.events, function(index, element) {
                    $('body').append($('<div>', {
                        text: element.name
                    }));
                });
            }
        });