Carbon
Carbon

Reputation: 143

Passing Javascript variable to Django views.py with getJSON

I currently have a javascript variable called myVariableToSend that contains a single string and I need to send to my views where I can make raw SQL queries to gather corresponding data from the database and bring it back to my javascript. Here is what I have:

Javascript:

function scriptFunction(myVariableToSend){

        $.getJSON("http://127.0.0.1:8000/getData/", myVariableToSend, function(serverdata){
        window.alert(serverdata);
});

Views.py:

def getData(request):
    some_data = request.GET(myVariableToSend)
    cursor = connection.cursor()
    cursor.execute("SELECT Car_ID FROM cars WHERE Carname = %s ", [some_data])
    row = cursor.fetchall()
    return JsonResponse(row, safe = False)

Urls.py:

url(r'^admin/', include(admin.site.urls)),
url(r'^$', startpage),
url(r'^getData/$', getData ),

I don't think my server side script(views.py) is working because when I run my server, I get a http500 error. Any help would be appreciated. Thank you.

UPDATE:

I have found that when I comment out my entire Views.py and only put

def getData(request):

return JsonResponse({"hello":"World"}, safe = False)

I get no problems and the AJAX request works. But when I have my original getData, it doesn't work. When I add this line in my views.py:

some_data = request.GET(myVariableToSend)

, I get an error and the data isn't displayed

Upvotes: 0

Views: 2894

Answers (2)

Marco Lavagnino
Marco Lavagnino

Reputation: 1229

Answering the original question:

Your server is failing probably because bad syntax in views.py

some_data = request.GET(myVariableToSend)

myVariableToSend is undefined here. So you should get it like this:

some_data = request.GET['myVariableToSend']

Besides the original question:

You'll get a lot of headaches if you try to set up your django app like this.You can query your database way easier if you use django's ORM. Read about it here.

Also, if you want to send the data in your models to your javascript code, you can save yourself lots of time by using a framework like Django REST Framework.

Upvotes: 1

Nursultan Bolatbayev
Nursultan Bolatbayev

Reputation: 148

If u want to send ur variables to function in view, u can capture it with url, like this:

$.getJSON('http://127.0.0.1:8000/getData/' + myVariableToSend +'/', function (serverdata) { //do ur work}

Then in urls.py you have:

url(r'getData/(?P<my_var>\w+)/$', views.get_data, name='get_data')

Then views.py:

def get_data(request, my_var):
#do ur work here

Upvotes: 1

Related Questions