Fehler: “CSRF-überprüfung ist fehlgeschlagen. Anfrage wurde abgebrochen." bei der Verwendung von jquery-ajax-mit Django

in der Vorlage:

<script type="text/javascript">
        $.ajax({
             type:"POST",
             url:"{% url DrHub.views.ajxTest %}",
             data: {
                    'start': $('#id_startTime').val(),
                    'end': $('#id_endTime').val(),
                    'csrfmiddlewaretoken': '{{ csrf_token }}'
             },
             success: function(data){
                 alert(data);
             }
        });
</script>
.
.
.
<form method='POST' action=".">
    {% csrf_token %}
    <input type="text id="id_startTime" />
    <input type="text id="id_endTime" />
    <input type="submit" value="send" />
</form>

in Aussicht:

def ajxTest(request):
   if request.is_ajax():
      if request.method == 'POST':
         return HttpResponse(json.dumps({'message' : 'awesome'},ensure_ascii=False), mimetype='application/javascript')

in settings.py:

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.locale.LocaleMiddleware',
)

beim Absenden habe ich diese Fehlermeldung:CSRF verification failed. Request aborted.

Suchte ich eine Menge, aber keine der vorgeschlagenen Lösungen bei mir funktioniert!

wie : Django CSRF check andernfalls mit einem Ajax-POST-request

und : Ajax Post in Django-framework?

Ich refreenced zu einer js-Datei mit diesem Inhalt:

$.ajaxSetup({ 
     beforeSend: function(xhr, settings) {
         function getCookie(name) {
             var cookieValue = null;
             if (document.cookie && document.cookie != '') {
                 var cookies = document.cookie.split(';');
                 for (var i = 0; i < cookies.length; i++) {
                     var cookie = jQuery.trim(cookies[i]);
                     // Does this cookie string begin with the name we want?
                 if (cookie.substring(0, name.length + 1) == (name + '=')) {
                     cookieValue = decodeURIComponent(cookie.substring(name.length + 1));
                     break;
                 }
             }
         }
         return cookieValue;
         }
         if (!(/^http:.*/.test(settings.url) || /^https:.*/.test(settings.url))) {
             // Only send the token to relative URLs i.e. locally.
             xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken'));
         }
     } 
});

aber das hat nicht funktioniert,auch!

Und ich sah die Lösung, die sagen, verwendet ajaxSetup statt ajaxSend,post-Daten, wie mache ich das?

  • haben Sie überprüft im firebug, dass das CSRF-token-Wert gepostet werden
  • Ich weiß nicht, wie zu verwenden firebug 😀
  • Sie können es von hier getfirebug.com die eine firefox-Erweiterung
  • Ich firebug installiert, aber ich habe es nicht verstanden!
  • wenn Ihre Seite geladen wird, drücken Sie f12 ein Fenster wird öffnen sich vor dir, jetzt, in diesem Fenster gehen Sie auf Net Registerkarte und in dieser Registerkarte wählen Sie XHR, jetzt tun die ajax-Anfrage wird es dort angezeigt
  • In Ihrem browser "view source" auf Ihrer Seite und stellen Sie sicher, dass die csrftoken-Wert eingefügt wurde, in Ihr javascript.
  • wenn ich Net tab finde ich nicht XHR !!
  • Sie muss etwas falsch...
  • siehe hier i.imgur.com/reo3R.png
  • Ich habe versucht, dies in eine einfache form, dann habe ich firebug überprüft und ich erhielt den Fehler "403 forbidden" in jquery.js Datei in diesem Artikel: // Senden der Daten try { xhr.send( type === "POST" || type === "PUT" || type === "LÖSCHEN" ? s.Daten : null ); } catch(e) { jQuery.handleError(E, xhr, null, e); // Feuer den kompletten Handler complete(); } in Zeile XHR.senden...
  • können Sie überprüfen, welche Parameter gesendet wurden, die in der Anforderung, überprüfen Sie die params-Registerkarte wenn Sie auf die Fehlermeldung
  • Ich habe keine params-Registerkarte!!!! aber bei der Post tab kann ich sehen, meine Parameter nur, wenn ich festen Wert zu Thema,wie: start: "8", end: "12", csrfmiddlewaretoken:"SDSDSFSF"

Schreibe einen Kommentar