2011-07-16 3 views
0

저는 AJAX와 JQuery를 처음 사용하기 때문에 가장 간단한 AJAX POST를 구현하려고합니다. 아이디어는 다음과 같습니다. 버튼이 있고 클릭하면 기본 POST 데이터를 같은 페이지 (http : // {{my ip address}}/django/ajax /)에 제출하고 싶습니다.Django/AJAX/JQuery - 간단한 POST 문제

<script type="text/javascript"> 
    function pythonizer(){ 
     $("#msgid").append("it SHOULD post after this is appended"); 
     $.ajax({ 
     url: '/django/ajax/', 
     type: 'POST', 
     data: {'obj': "test string"}, 
     dataType: 'json', 
     contentType: "application/json; charset=utf-8", 
     success: function(response) { 
        alert(response); 
      } 
     }); 
     } 
</script>  

<div id="msgid"> 
</div> 

<input type="button" id="myButton" value="click me" onclick="pythonizer()" /> 

그리고 view.py 내 관련 기능은 다음과 같습니다 : 내 .html 파일에서

나는이 간단한

def ajax(request): 
    if request.method == 'POST': 
     return HttpResponse("Hello AJAX") 

    return render_to_response('huh.html', {}) 

, 맞죠? 그러나 문제는, 내 버튼을 클릭하면 "이 코드가 추가되어야합니다."가 div에 성공적으로 추가되었지만 HttpResponse ("Hello AJAX")가 반환되지 않고 POST가 수행되지 않습니다. 일!

필자가 작성한 문서는 내가 읽은 문서와 일치하는 것으로 보이지만 바보 같은 것을 놓치고 있거나 POST를 단순화하려는 느낌이 들었습니다. 미리 감사드립니다!

+0

당신이 JS 오류가 있습니까? 어쩌면 JS var "데이터"는 정의되지 않았습니다. – Guy

+0

좀 더 명확하게 변경했습니다. 이제 데이터입니다 : { 'obj': "test string"}. 그러나 POST는 여전히 성공적으로 작동하지 않습니다. –

답변

1

django 또는 python을 모르지만 javascript의 문제는 AJAX 호출이 완료 될 때 아무 것도하지 않는다는 것입니다.

<script type="text/javascript"> 
function pythonizer(){ 
    $("#msgid").append("it SHOULD post after this is appended"); 
    $.ajax({ 
    url: '/django/ajax/', 
    type: 'POST', 
    data: {'obj':data}, // <-- possible error? 
    dataType: 'json', 
    contentType: "application/json; charset=utf-8", 
    success: function (response) { 
     alert(response); 
    } 
    }); 
    } 
</script> 

응답에 작성한 내용 ("Hello AJAX"라고 가정)을 알려줍니다.

또한 스크립트에 오류가 있습니다. '데이터'를 정의하지 않았습니다 (data: {'obj':data},). data을 다른 곳에서 선언하지 않는 한이 스크립트는있는 그대로 실행되지 않습니다.

+0

Firefox를 사용 중이거나 Chrome을 사용중인 경우 Javascript 콘솔을 열고 오류를 확인하는 경우 Firebug를 설치하는 것이 좋습니다. 또한 각각의 네트워크 탭을 사용하여 ajax 요청이 실제로 통과하는지 여부와 그 상태가 무엇인지 확인할 수 있습니다. – evan

+0

그냥 "undefined"라고 말하면 오류가 아닙니다. 단지'pythonizer()'가 아무 것도 반환하지 않기 때문입니다 .- 만약'return true; '를 추가하거나 끝에 무언가를'true'라고 쓰면 말입니다. 'response'는 괜찮습니다. – evan

+0

죄송합니다. 명확하지 않은 경우 "return true;"를 추가하십시오. 'pythonizer' 함수의 끝까지. 'undefined'는 ** 틀림없이 ** 오류가 아닙니다. 네트워크 탭을 보셨습니까? 네트워크 탭을 확인하여 POST가 발생하고 있는지 여부를 명확하게 볼 수 있습니다. – evan

0

여기에 오류가있을 수 있습니까?

success: function(response) 

내가 는 파이썬이 모든 요청을 받고 ... 디버그 정보없이 더 말할 수 없다? 어쩌면 그것은 CSRF 유효성 검사를 거부 문제가 그리고 당신은 추가하고 가져와야 : 어쩌면 그것의 더 나은 첫번째 이럴에서 깊은 가지 않는 https://docs.djangoproject.com/en/1.2/releases/1.2.5/#csrf-exception-for-ajax-requests

을 :

@csrf_exempt 
def myview(request): 
    print 'hello' 

아마도 당신이 읽을 수 더 그것에 대해 여기 ?

그래서 다른 jQuery 지름길을 사용하지 않으시겠습니까?

$.post('/django/ajax/', data, function(data){ 
           alert(data); 
           }); 

는 어쩌면 개인 코드를 잘못 해요,하지만 난 여기 공식 도움의 당신은 단순히 그것을 알아낼 수있을 거라 생각 :

    이 두 가지 좋은 일들이 있습니다 http://api.jquery.com/jQuery.post/

  1. 방화범
  2. 장고 디버그 도구 모음 (모질라 파이어 폭스는 어쩌면 다른 브라우저도 좋다)

그들은 파이썬과 jQuery 양쪽에서 디버깅에 좋습니다 ... 그들을 사용하는 법을 배우십시오 ... (만약 당신이 이미 그런 경우에 당신에게 그런 뻔한 것을 말하게해서 죄송합니다 :))

0

JSON 응답을 원한다고 가정합니다.

jquery document은 사용할 수있는 다양한 데이터 유형을 설명합니다. dataType:'json'이 사용되면 ajax 메소드는 응답 컨텍스트 유형이 JSON이 될 것으로 예상합니다. 템플릿 html 파일에서

이 시도 :

<script type="text/javascript"> 
function pythonizer(){ 
    var data = "data"; 
    $("#msgid").append("it SHOULD post after this is appended"); 
    $.ajax({ 
     url: '/django/ajax/', 
     type: 'POST', 
     data: {obj:data}, 
     dataType: 'json', 
     contentType: "application/json; charset=utf-8", 
     success: function (response) { 
      alert(response); 
     } 
     error:function(){ 
      alert("failure"); 
     } 
    }); 
} 
</script> 

당신의 views.py이 시도 :

import json 
from django.http import HttpResponse 

def ajax(request): 
    if request.method == 'POST': 
     return HttpResponse({'message':'Hello Ajax'}, content_type = "application/json")