2016-06-16 2 views
0

На веб-сайте Django я пытаюсь проверить ввод поля для совпадений базы данных. У меня есть функции поиска в файлах Django .py, но поскольку я не могу запускать их после загрузки страницы, я предполагаю, что запрос POST для JavaScript является лучшим вариантом.Django Javascript POST-запрос

<input id="this_field" onblur="querySomething()"> 

Есть множество SO вопросов на JS POST [1, 2, 3 и т.д.], однако, я не мог получить любой из них, чтобы работать на меня. Вот один из моих многочисленных попыток получить что-то полезное ПРОИСХОДИТ:

function querySomething(){ 
    $.ajax({ 
     type: "POST", 
     url: "/my/url/", 
     data: {"check_this": "123-456789",}, 
     success: function() { 
     alert('success'); 
     } 
    }); 

Или

function postSearch() { 
    $.post("/my/url/", 
    { 
     "check_this": "123-456789", 
    }, 
    function(data, status){ 
     alert("Data: " + data + "\nStatus: " + status); 
    }) 
} 

Если я просто рассматривать вход, как в поле поиска и отправить его (с JS или иным образом) он отлично работает , Однако, поскольку я пытаюсь предоставить результаты, чтобы помочь пользователю закончить заполнение остальной части страницы, мне нужно, чтобы результаты были доступны на той же странице, как только пользовательский фокус покидает поле.

Я не знаю, включен ли мой токен {% csrf_token %} здесь. Я не получаю никаких ошибок или сообщений в консоли или в журналах сервера.

// отредактированную версию кода теперь гласит:

function querySomething(){ 
    $.ajax({ 
     type: "POST", 
     url: "/my/url/", 
     headers: { 
      "Content-Type": "application/json", 
      "HTTP_GROUP_NAME": "groups_name", 
     }, 
     data: { 
      "check_this": $('#this_field').val(), 
      "csrfmiddlewaretoken": "{{csrf_token}}", 
     }, 
     success: function(data){ 
      console.log("success"); 
      console.log(data); 
     }, 
     failure: function(data){ 
      console.log("failure"); 
      console.log(data); 
     }, 
    }); 
    alert('marcusShep function ran.') 
} 

ответ

1

Вы тверды кодирование почтовых данных с "check_this": "123-456789",.

Использование может использовать GET, а не POST, потому что вы не создаете элемент. Тем не менее вы извлекаете несколько.

Кроме того, вы не определили функцию failure. Это поможет вам с отладкой совсем немного.

$.ajax({ 
    type: "GET", 
    url: "/my/url/", 
    data: { 
     "check_this": $("#this_field").val(), 
    }, 
    success: function(data){ 
     console.log("success"); 
     console.log(data); 
    }, 
    failure: function(data){ 
     console.log("failure"); 
     console.log(data); 
    }, 
}); 

Ваше мнение должно выглядеть примерно так:

form django.http import JsonResponse 

def foo(request, *a, **kw): 
    # Notice I didn't directly try to access request.GET["check_this"] 
    search_value = request.GET.get("check_this", None) 
    if search_value: 
     data = dict() 
     # Finding some data that you want. 
     data["result"] = MyModel.objects.filter(name=str(search_value)) 
     # Using Django's beautiful JsonResponse class 
     # to return your dict as JSON. 
     return JsonResponse(data, verify=false) 
+0

закодирована ограничить возможные ошибки оклейки здесь. Я изменил '{% csrf_token%}' на '" {{csrf_token}} ", чтобы исправить' ... неожиданную <'ошибку, поскольку первая сбрасывает скрытое поле' whyeliah

+0

Я обновил свой ответ – marcusshep

+0

@whyeliah, если вы нашли этот ответ полезным, вам следует принять его. – marcusshep