2013-02-27 3 views
3

Хорошо, во-первых, я JQuery/AJAX noob, но я могу обойтись большую часть времени.Django/AJAX/JQuery - Не удалось получить ответ POST

В этом проблема.

По какой-то причине каждый раз, когда я использую POST как тип AJAX, я не получаю ответа, но когда я использую GET, я получаю ответ.

Почему это происходит и как его исправить.

HTML

<form action="/trivia/ajax_test/" method="post" onsubmit="return ajaxTest()"> 
{% csrf_token %} 
<button type="submit">AJAX</button> 
</form> 

JQuery/AJAX

function ajaxTest() { 
    $.ajax({ 
     type: 'POST', // Works with 'GET', but failing with 'POST' 
     url: '/trivia/ajax_test/', 
     data: {some_text: 'The test is working'}, 
     success: function(result){alert(result);} 
    }); 

    return false; 
} 

URLS

(r'^trivia/ajax_test/$', 'findadownload.trivia.views.ajax_test'), 

МНЕНИЯ

def ajax_test(request): 
    if request.is_ajax(): 
     return HttpResponse("Success") 

    else: 
     result = "You went to the url directly" 

    return HttpResponse(result) 

ответ

2

Th есть из-за CSRF protection, встроенного в Django.

Добавьте это на свой Javascript, перед тем как позвонить Ajax или disable CSRF protection для вашего просмотра POST.

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; 
} 

var csrftoken = getCookie('csrftoken'); 

function csrfSafeMethod(method) { 
    // these HTTP methods do not require CSRF protection 
    return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method)); 
} 
$.ajaxSetup({ 
    crossDomain: false, // obviates need for sameOrigin test 
    beforeSend: function(xhr, settings) { 
     if (!csrfSafeMethod(settings.type)) { 
      xhr.setRequestHeader("X-CSRFToken", csrftoken); 
     } 
    } 
}); 
+0

Ничего себе, спасибо! Это много javascript. Я думаю, что я просто отключу CSRF. Я забыл, что ты можешь это сделать. –

Смежные вопросы