[FIXED] Ajax-Aufruf in Django ohne Formular

Ausgabe

Neu bei Ajax, also versuche ich, mich mit den Dingen zu beschäftigen. Ich versuche, einen Ajax-Aufruf zu tätigen, indem ich meinen Javascript-Ereignishandler mit dem Onclick für ein Span-Element verbinde. Es gibt kein Formularelement in meiner Vorlage. Ist es möglich, einen Ajax-Aufruf ohne ein Formularelement in Django zu tätigen? So wie ich es verstehe, bekomme ich es aber nicht zum Laufen. Wenn ich mir die Anfrage in meiner Ansicht anschaue, gibt es keinen HTTP_X_REQUESTED_WITH-Header, sodass der Aufruf von request.is_ajax() immer falsch zurückgibt.

Hier ist der relevante Teil meiner Vorlage:

<td><span class="header" onclick="sort_user_table('username')"><a href="">Username</a></span></td>

Hier ist meine Javascript-Funktion:

function sort_user_table(col_name) {
  $.ajax({
    url: "/listusers/",
    data: {sort_order: col_name},
    headers: {'HTTP_X_REQUESTED_WITH': 'XMLHttpRequest'},
    type: "GET",
    dataType : "json",
    success: function(json) {
      alert('json = ' + json);
    },
  });
}

Und hier meine Ansicht:

def list_users_page(request):
  if request.is_ajax():
    sort_order = request.GET['sort_order']
    users = User.objects.all().order_by(sort_order)
    data = serializers.serialize('json', users)
    json_users = json.dumps(data)
    return HttpResponse(json_users, mimetype='application/json')
  else:
    users = User.objects.all().order_by('last_name')
    variables = RequestContext(request, {
      'users': users,
    })
    return render_to_response('users_page.html', variables)

Lösung

Okay, also habe ich herausgefunden, was passiert ist. Ich habe einen Fehler beim Posten meines Vorlagencodes gemacht, sodass er nicht vollständig war (ich habe versucht, mich kurz zu fassen, aber am Ende habe ich eine wichtige Information ausgelassen). So sieht das echte Stück Code aus:

<td><span class="header" onclick="sort_user_table('username')"><a href="">Username</a></span></td>

Das hrefhat das Problem verursacht. Da es sich eigentlich um einen Link handelt, wurde eine Anfrage an eine neue Ressource gestellt, als ich auf das Benutzername- spanElement geklickt habe. Obwohl also der Javascript-Code ausgeführt wurde, war es eigentlich keine Ajax-Anfrage, sondern eine einfache HTTP-Anfrage. Wenn ich das einfach hrefaus dem spanElement entferne, funktioniert alles wie erwartet. Der HTTP_X_REQUESTED_WITHHeader wird gesendet und meine Django-Ansicht antwortet true auf request.is_ajax().


Beantwortet von –
nucklehedd


Antwort geprüft von –
Cary Denson (FixError Admin)

0 Shares:
Leave a Reply

Your email address will not be published. Required fields are marked *

You May Also Like