2014-09-11 3 views
4

이러한 질문 중 몇 가지를 보았지만 솔루션을 구현하려고 시도했지만 저에게 효과적이지 않았습니다.QueryDict은 항상 AJAX POST에서 비어 있습니다.

POST를 사용하여 장고보기에 기본 AJAX 요청을 보내려고합니다. 여기 내 JQuery와 있습니다 :

$('#save-button').click(function() { 
    var names = ['BLOGGS Joe', 'SMITH John']; 
    data = JSON.stringify(names); 
    $.ajax({ 
     "contentType": "application/json; charset=utf-8", 
     "data": data, 
     "url" : "/ajax/myteam/save/", 
     "type": "POST", 
     "success": function(response) { 

     } 
    }); 
}); 

그리고 여기 내 장고이다 :

def myteam_save(request): 
    if request.method == 'POST': 
     if request.POST: 
      print 'Hurray' 
     else: 
      print 'Boo' 
     response = HttpResponse(json.dumps({'code':'ok'}), content_type='application/json') 
     return response 

방화범 일이 내가 의도 한대로 포스트가 이루어지고 있음을 볼 무슨 나는 검사 만 요청에서 QueryDict 객체 .POST는 항상 비어 있습니다.

내가 생각하는 csrf 토큰에주의를 기울 였고 심지어 내 설정에서 'django.middleware.csrf.CsrfViewMiddleware'를 끈 경우에도 효과가없는 것으로 보입니다.

내가 뭘 잘못하고 있니?

도움 주셔서 감사합니다.

+0

"contentType": "application/json; charset = utf-8"'JSON을 서버에 보내지 않습니다. 또한'response'를 파싱 가능한 JSON 객체로 취급하기 위해'success function '을 알리는 것은'dataType :'json '이어야합니다. 지금까지 장고 응답에 관한 한 ... 페이지에 직접 액세스하여 출력이 나올 때까지 디버그하고 출력이 실제로 json인지 확인합니다. – Ohgodwhy

+0

@Ohgodwhy 응답에 감사드립니다. 콘텐츠 유형은 문제를 해결하기 위해 다른 사람의 코드와 일치시키려는 시도 였고 변경을 잊어 버렸습니다. 직접 페이지에 액세스하면 무슨 뜻입니까 (바보 같은 질문이라면 죄송합니다)? – lac

답변

4

Django 실제로 페이로드는 JSON 번 역 직렬화되지 않습니다. request.POST은 HTML 게시 양식 등에 사용하기위한 것입니다.

JSON 페이로드의 경우 요청 본문을 직접 serialize해야합니다 (예 : json.loads(request.body)).

(request.body은 원시 페이로드에 액세스하는 방법입니다.)

관련 문제