POST请求在Django中使用ajax [英] POST request using ajax in Django

查看:363
本文介绍了POST请求在Django中使用ajax的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我尝试使用Django中的ajax发送POST请求时,遇到了一些问题。我已经在这里研究了一些主题,但仍然找不到解决这些问题的方法。



这是我的JavaScript代码,跟随此解决方案

  $。ajax({
url:'{%url home%}',
data:{selected_folders:formData,
csrfmiddlewaretoken:'{{csrf_token }}'},
dataType:json,
type:POST,
});

我也尝试 Django的解决方案

  $ ).submit(function(){
var csrftoken = $ .cookie('csrftoken');
$ .ajax({
url:'{%url home%}',
data:{selected_folders:formData,
csrfmiddlewaretoken:csrftoken},
dataType:json,
type:POST,
});
});

这是我的 view.py p>

  def home(request):
if request.method =='POST':
Call_Other_Class()
return render_to_response('home.html')

我的目标是发送POST请求 home.html 本身,当 home.html 获取POST请求时,它会调用其他类来做某事其他。我不确定将CSRF令牌放在模板中,如果我的 view.py 中的代码是否正确。


$ b $感谢您的阅读和解决问题。



编辑



我编辑我的JavaScript代码到:

 < script type =text / javascriptcharset =utf-8 > 
$(document).ready(function(){
var csrftoken = Cookies.get('csrftoken');
函数csrfSafeMethod(method){
return(/ $ {

$ b $ .ajax({
url:'{%url home%}',
数据:{selected_folders:formData},
beforeSend:function(xhr,settings){
if(!csrfSafeMethod(settings.type)&!this.crossDomain){
xhr。 setRequestHeader(X-CSRFToken,csrftoken);
}
},
dataType:json,
type:POST,
});
});
< / script>

HTML:

 code><形式> 
< ul>
< li id ='key1'>< / li>
< li id ='key2'>< / li>
< / ul>
< / form>

仍然无效。

解决方案

对于Js:

  $(form)。submit 
$ .ajax({
url:'{%url home%}',
data:{selected_folders:formData,
csrfmiddlewaretoken:$([name = csrfmiddlewaretoken] ),
dataType:json,
类型:POST,
});
});

对于 view.py

  def home(request):
if request.method =='POST'and request.is_ajax():
Call_Other_Class()
return render_to_response('home.html')


I met some problems when I try to send the POST request using ajax in Django. I already research some topics here, but still can't find the way to solved them.

Here is my javascript code that follow this solution:

$.ajax({
    url: '{% url home %}',
    data: {selected_folders: formData,
           csrfmiddlewaretoken: '{{ csrf_token }}'},
    dataType: "json",
    type: "POST",
});

I also try the solution from Django

$("form").submit(function() {
    var csrftoken = $.cookie('csrftoken');
    $.ajax({
        url: '{% url home %}',
        data: {selected_folders: formData,
               csrfmiddlewaretoken: csrftoken},
        dataType: "json",
        type: "POST",
    });
});

Here is my view.py

def home(request):        
    if request.method == 'POST':
        Call_Other_Class()
    return render_to_response('home.html')

My goal is to send the POST request from home.html to itself, and when home.html get the POST request, it will call other classes to do something else. I am not sure where to put the CSRF token in the template and if my code in view.py is correct or not.

Thanks for your reading and solve my problems.

Edit:

I edited my javascript code to:

<script type="text/javascript" charset="utf-8">
    $(document).ready(function() {
      var csrftoken = Cookies.get('csrftoken');
      function csrfSafeMethod(method) {
        return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
      }
      $.ajax({
        url: '{% url home %}',
        data: {selected_folders: formData},
        beforeSend: function(xhr, settings) {
          if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
            xhr.setRequestHeader("X-CSRFToken", csrftoken);
          }
        },
        dataType: "json",
        type: "POST",
      });
    });
</script>

HTML:

<form>
  <ul>
    <li id='key1'></li>
    <li id='key2'></li>
  </ul>
</form>

still doesn't work.

解决方案

For Js:

$("form").submit(function() {
   $.ajax({
       url: '{% url home %}',
       data: {selected_folders: formData,
           csrfmiddlewaretoken: $("[name = csrfmiddlewaretoken]"),
        dataType: "json",
        type: "POST",
    });
});

For view.py:

def home(request):        
if request.method == 'POST' and request.is_ajax():
    Call_Other_Class()
return render_to_response('home.html')

这篇关于POST请求在Django中使用ajax的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆