Yunus
Yunus

Reputation: 415

Django is not taking GET input in AJAX call

I am trying to take username input and return in ajax call whether the username is taken or not in Django. But the method in DJango is not taking the input. I am sharing the code here.

URL.py

url(r'^search_username/$', user.views.search_product, name="search_username"),

script + HTML

{% load staticfiles %}


  {% block content %}
  <form method="post">
  {% csrf_token %}
  <input name="search" id="search" type="text"/>
  <button type="submit">Sign up</button>
    </form>
  {% endblock %}

$("#search").change(function () {

  var username = $(this).val();

  $.ajax({
    url: '/search_username/',
    data: {
      'username': username
    },
    dataType: 'json',
    error: function(){
        alert('failure');
    },
    success: function (data) {
      if (data.is_taken) {
        alert("A user with this username already exists.");
      }
    }
  });

});

Views.py

def search_username(request):
    print('Entered into search')
    username = request.GET.get('search', None)
    print(username)
    data = {
       'is_taken': allproductlist.objects.filter(product_name_english__iexact=username).exists()
    }

    return JsonResponse(data)

The problem is it prints Entered into search.But when I print username it shows NOne. Can anyone please specify what is happening ?

Upvotes: 0

Views: 100

Answers (2)

Usman Maqbool
Usman Maqbool

Reputation: 3371

you are sending username in ajax request but you are getting search in views.py.

you can Update your ajax code:

$("#search").change(function () {

  var username = $(this).val();

  $.ajax({
    url: '/search_username/',
    data: {
      'search': username
    },
    dataType: 'json',
    error: function(){
        alert('failure');
    },
    success: function (data) {
      if (data.is_taken) {
        alert("A user with this username already exists.");
      }
    }
  });

});

2nd way is that you can change in views.py.

username = request.GET.get('username', None)

Upvotes: 2

Daniel Roseman
Daniel Roseman

Reputation: 600041

Your Ajax is sending the data as "username" but your Python is looking for "search".

Upvotes: 2

Related Questions