我试图让Ajax POST将数据发送到视图,以便在单击divwith类时可以在那里处理数据up-arrow。
POST
div
up-arrow
问题是,当我单击所说的div并request.POST在视图文件中打印时,我得到了一个POST包含的对象<QueryDict: {}>。空!我似乎无法弄清楚为什么我的POST请求没有通过发送我的数据。
request.POST
<QueryDict: {}>
这是我的HTML …
{% for i in post.posts %} <li> <div> <div class='up-arrow'> </div> {{i}} </div> </li> {% endfor %}
这是我的AJAX / jQuery …
$(document).ready(function(){ $('.up-arrow').click(function(){ $(this).hide() console.log('click') $.ajax({ headers: { 'Content-Type':'application/json', 'X-CSRFToken': getCookie('csrftoken') }, url: 'voteuppost', type: 'POST', data: {'dane': 123456789101112}, success: function(data) { alert('success!') }, error: function(){ alert('fail') } }) return false }); 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]); if (cookie.substring(0, name.length + 1) == (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; } })
这是我的看法
class VoteUpPost(View): def post(self, request): print(request.POST) return JsonResponse({'status': True})
这是我的网址路线…
url(r'^voteuppost$', VoteUpPost.as_view()),
我尝试过的东西
1)我用GET代替,POST我能够使用request.GET.get('dane')
GET
request.GET.get('dane')
1)尝试使用request.POST.data和request.POST.DATA获得以下内容… AttributeError: 'QueryDict' object has no attribute 'data',我也得到了’失败’ alert。
request.POST.data
request.POST.DATA
AttributeError: 'QueryDict' object has no attribute 'data'
alert
如何通过POST请求将数据发送到视图,然后访问其中的数据?
与一起发布JSON数据时,application/json您需要使用request.body而不是request.POST。
application/json
request.body
像这样:
class VoteUpPost(View): def post(self, request): print(request.body) data = json.loads(request.body) return JsonResponse({'status': True})
就像雅克提到的那样,请确保更新您的js以传递JSON字符串。
更改:
data: {'dane': 123456789101112},
至:
data: JSON.stringify({'dane': 123456789101112}),