403使用ajax发送JSON数据时出现禁止错误

时间:2015-08-28 09:08:28

标签: ajax django

这些是用于使用ajax发送json数据的代码段。 您可以在上次发布中显示相同的代码。 我只关注代码。 但我得到403错误

jsonpost.html

<!DOCTYPE html>
<html>
<head>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script>
$(document).ready(function(){
    $("#mySelect").change(function(){
        selected = $("#mySelect option:selected").text()
        $.ajax({
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            url: '/test/jsontest/',
            data: {
                   'fruit': selected,
                   'csrfmiddlewaretoken': '{{ csrf_token }}'
                  },
            success: function(result) {
                    document.write(result)
                    }
    });
  });
});
</script>
</head>
<body>

<form>
    {% csrf_token %}
    {{ data }}
    <br>
Select your favorite fruit:
<select id="mySelect">
  <option value="apple" selected >Select fruit</option>
  <option value="apple">Apple</option>
  <option value="orange">Orange</option>
  <option value="pineapple">Pineapple</option>
  <option value="banana">Banana</option>
</select>
</form>
</body>
</html>

urls.py

urlpatterns = patterns('',
    url(r'^jsontest/$', views.JsonRead.as_view(), name='userTest'),
)

views.py

class JsonRead(View):
    def get(self,request):
        return render(request, 'MW_Etc/jsonpost.html')

    def post(self,request):
        print(request.body)
        data = request.body
        return HttpResponse(json.dumps(data))

更改果实值后,我收到错误。 我该如何解决这个问题? 任何其他好的方式也是好的。

enter image description here

1 个答案:

答案 0 :(得分:0)

如果您使用post方法,则必须在表单中发送csrf令牌,在ajax的情况下必须完成同样的操作

$(document).ready(function(){
    $("#mySelect").change(function(){
        selected = $("#mySelect option:selected").text()
        $.ajax({
            type: 'POST',
            dataType: 'json',
            contentType: 'application/json; charset=utf-8',
            url: '/test/jsontest/',
            data: {
                   'fruit': selected,
                    csrfmiddlewaretoken: '{{ csrf_token }}'
                  },
            success: function(result) {
                    document.write(result)
                    }
    });
  });
});

尝试这样,这对我有用。