2016-06-16 15 views
0

Auf einer Django-Website versuche ich eine Feldeingabe für Datenbankübereinstimmungen zu überprüfen. Ich habe Suchfunktionen in meinen Django .py-Dateien, aber da ich sie nach dem Laden der Seite nicht ausführen kann, gehe ich davon aus, dass eine JavaScript-POST-Anfrage die beste Option ist.Django Javascript POST-Anfrage

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

Es gibt zahlreiche SO Fragen über JS POST [1, 2, 3, etc.], jedoch habe ich nicht in der Lage gewesen, einen von ihnen zu bekommen, für mich zu arbeiten. Hier ist eine meiner vielen Versuchen, etwas Nützliches in Gang zu bringen:

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

Oder

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

Wenn ich nur die Eingabe wie ein Suchfeld behandeln und legt ihn (mit JS oder auf andere Weise), es funktioniert . Da ich jedoch versuche, dem Benutzer Ergebnisse zur Verfügung zu stellen, damit er den Rest der Seite ausfüllen kann, müssen die Ergebnisse auf derselben Seite verfügbar sein, sobald der Benutzer den Fokus verlässt.

Ich weiß nicht, ob meine {% csrf_token %} Token hier ins Spiel kommt. Ich erhalte keine Fehler oder Nachrichten in der Konsole oder in meinen Serverprotokollen.

// Edited Version von Code lautet nun:

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

Antwort

1

Sie sind mit "check_this": "123-456789", die Post-Daten harte Kodierung.

Verwendung könnte GET anstelle von POST verwenden, da Sie kein Element erstellen. Aber Sie holen ein paar zurück.

Außerdem haben Sie keine failure-Funktion definiert. Dies wird Ihnen beim Debuggen helfen.

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

Ihre Ansicht sollte dann in etwa so aussehen:

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

Fest codiert mögliche Fehler hier einfügen zu begrenzen. Ich habe '{% csrf_token%}' in '{{csrf_token}}' 'geändert, um' ... unerwarteten <'Fehler zu beheben, da der erste ein verstecktes' whyeliah

+0

Ich habe meine Antwort aktualisiert – marcusshep

+0

@whyeliah Wenn Sie diese Antwort hilfreich finden, sollten Sie in Betracht ziehen, diese zu akzeptieren. – marcusshep

Verwandte Themen