django ajax发布空数据

时间:2018-03-22 22:27:49

标签: python ajax django

我试图使用ajax将数据发布到django视图。我没有错误,只是没有返回数据。 这是我的javascript ajax:

 function PostGoal(){
    console.log('POSTGOAL!!!')
    data_s = {
            'csrfmiddlewaretoken': $('input[name="csrfmiddlewaretoken"]').val(),
            'goal': { 'name':'gg','box':'sasa' }
        }

    $.ajax({
        method: "POST",
        url: "http://127.0.0.1:8000/",//"{% url 'home' %}",//"/",//"{% url 'home' %}",
        contentType: 'application/json',
        //data: JSON.stringify(data_s),
        data: {'QQww': "1"},
        //dataType: 'json',//expected type of response
        success: function (data) {
          console.log('aa'+JSON.stringify(data))
        },
        error: function(xhr,errmsg,err){
            console.log('err: '+JSON.stringify(err)+' msg:'+errmsg)
        }
    });
}

这是我的视图功能:

def analyzer(request):
    if request.method == 'POST':
    post_data = request.POST
    print(post_data)
    print ('  ajax:',request.is_ajax())

布尔值request.is_ajax()是ajax总是False request.data或request.POST.data不存在且GET相同:request.GET为空。但是我可以在终端的日志中看到:

  [22/Mar/2018 22:15:26] "GET /?QQww=1 HTTP/1.1" 200 9746

所以基本上数据是在网址中解析的?提前谢谢。

1 个答案:

答案 0 :(得分:0)

我在其他一些帖子中读到'method'是指定调用的正确字段。由于某种原因,参数'method'不起作用,正确的字段是'type':

 $.ajaxSetup({
      headers: { "X-CSRFToken": '{{csrf_token}}' }
    });
 $.ajax({
    type: "POST",
    url: "http://127.0.0.1:8000/",//"{% url 'home' %}",//"/",//"{% url 'home' %}",
    contentType: 'application/json',
    //data: JSON.stringify(data_s),
    data: {'QQww': "1"},
    //dataType: 'json',//expected type of response
    success: function (data) {
      console.log('aa'+JSON.stringify(data))
    },
    error: function(xhr,errmsg,err){
        console.log('err: '+JSON.stringify(err)+' msg:'+errmsg)
    }
});

html按钮也需要是'button'类型而不是'submit':

<button type="button" class="btn btn-primary btn-large" id="yesbtn" name="yesbtn" value="yesbtn" onclick="PostGoal();">Yes &raquo;</button> 

我还添加了csrf令牌的ajax设置来纠正错误:

  'Forbidden (CSRF token missing or incorrect.): /'

我希望它有所帮助。