2016-11-15 3 views
0
<script> 
    function post(e) { 
     data = $("#form_add_post").serialize(); 
     $.post("/post/", function(data) { 
       alert("posted"); 
     }); 
     return false; 
    } 
    function addPost(){ 
    $(".matter").html("<form id='form_add_post' onsubmit='return post(event);'>{% csrf_token %} <table> <tr> <td class='heading'>Title: </td> <td class='box'><input type='text' name='title'></td> </tr> <tr> <td colspan='2'><textarea class='data' name='content'></textarea></td> </tr> </table> <input id='submitt1' type='submit'> </form>"); 
} 
</script> 

Я пытаюсь выполнить пост AJAX. Я также разместил csrf_token. Я перекрестно проверил данные, которые отправляются. Он показывает все детали, включая csrf_token.
Мои данные:csrf_token не найден django ajax

csrfmiddlewaretoken = foYqu9LrR25AomOmcFkaEicmN3CU2wcRNVg1gRPgl2F9XfL6IWerpbSK6TUKd4Ke & название = Tester & содержание = hhgj% 3B% 3Bhghjbjn

Но я получаю 403 ошибку, показывая

CSRF проверки не смогли. Запрос прерван.

Image showing the error

+0

Посмотрите на эту ссылку [https://docs.djangoproject.com/es/1.10/ref/csrf/#ajax](https:// docs.djangoproject.com/es/1.10/ref/csrf/#ajax) – jaime

ответ

1

Попробуйте сделать запрос таким образом

$.ajax({ 
     type:form.attr('method'), 
     url:form.attr('action'), 
     data:form.serialize(), 
     success: function(){ 
      ... 
     } 
     }); 
+0

Работало отлично. Могу ли я узнать, в чем проблема в коде, который я написал. – dharmista

0

Согласно Laravel Docs вы должны добавить CSRF токены в Ajax запросов, как это:

HTML код:

<meta name="csrf-token" content="{{ csrf_token() }}"> 

JS код:

$.ajaxSetup({ 
    headers: { 
     'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content') 
    } 
}); 

В случае Django - вам нужно добавить шаблон {% csrf_token %} как дочерний элемент формы в шаблон Django. См. Это - Question

Надеюсь, что это поможет!

+0

По-прежнему отображается та же ошибка – dharmista

+0

Какая ошибка! –

+0

Размещено изображение ошибки – dharmista

0

Неверно указан $.post. Если вы посмотрите на запрос в своих инструментах разработчика, я думаю, вы увидите, что данные для сообщений пустые.

Второй аргумент должен быть данными запроса, а третьим аргументом является обратный вызов success.

$.post("/post/", 
     data, 
     function (response_data) { 
     alert("posted"); 
     } 
); 

После того, как вы исправили, что the Django docs показать, как включить маркер CSRF в качестве заголовка в Ajax запросов, так что вы не должны включать его в виде тела.