2011-02-16 6 views
1

문제는 양식을 제출할 때 실제 URL (/ results)에 배치하지 않고 응답을 새 URL (/ feedback)에 삽입한다는 것입니다. . 경고는 실행되지 않습니다. 나는 템플릿에서 뭔가 잘못하고있는 것 같지만 해결책을 찾을 수 없다.Django로 ajax 양식 구현

보기를 디버그하여 request.is_ajax()으로 만들었습니다. False를 반환했습니다.

views.py :

def ajax_feedback(request): 
    success = False 
    if request.method == "POST": 
     post = request.POST.copy() 
     if post.has_key('rel') and post.has_key('relp'): 
       rel = post['rel'] 
       relp = post['relp'] 
       q = post['query'] 
       fq = post['full_query'] 
       fq = fq[:350] 
       ip = request.META['REMOTE_ADDR'] 
       feedback = FeedBack(q=q, ip_address=ip, 
            user=request.user, relevance=rel, rel_pages=relp, 
            full_query=fq) 
       feedback.save() 
       success = True 
    if success == True: 
     return HttpResponse("Success") 
    else: 
     return HttpResponse("Error") 

results.html :

<form method="post" action="/feedback/" id="feedback_form"> 
    <input type="radio" name="rel" value="yes" id="rel" /> Yes<br /> 
    <input type="radio" name="rel" value="no" id="rel" /> No 
    <input type="radio" name="relp" value="1-5" id="relp" /> 1-5 <br /> 
    <input type="radio" name="relp" value="6-10" id="relp" /> 6-10 
    <input type="hidden" name="query" value="{{ query }}"> 
    <input type="hidden" name="full_query" value="{{ bq }}"> 
    <input id="create" type="submit" value="Send"> 
</form> 
<script> 
     var create_note = function() { 
     var rel = $("#rel").val() 
     var relp = $("#relp").val() 
     var query = {{ query }} 
     var full_query = {{ bq }} 
     var data = { rel:rel, relp:relp, query:query, full_query:full_query }; 
     var args = { 
      type: "POST", 
      url: "/feedback/", 
      data: data, 
      success: function(msg){ 
       alert(msg); 
      } 
     } 
     $.ajax(args); 
     return false; 
    }; 
    $("#create").click(create_note); 
</script> 

urls.py :

... 
(r'^feedback/$', views.ajax_feedback), 
(r'^results/(?P<query>.+)/$', views.results), 
... 
+0

저는 약간 혼란 스럽습니다. 문제는 그것이/feedback /가 당신의 jQuery에 게시하는 것을 제외하고 있다는 것입니다. – Kekoa

+0

예, 의견을 보내고 싶지만 다른 페이지에 응답을 표시하지 마십시오. –

답변

-1

당신은 당신의 success 함수 선언 후 누락 된 닫기 중괄호가 있습니다. 이 때문에 return false에 도달하지 못했으며 브라우저가 정상적인 HTTP 요청을 통해 양식을 제출합니다. 이는보기에 도달 할 때 Ajax 호출이 아닌 이유입니다.

다른 JS 버그는 {{ query }}{{ bp }}을 따옴표로 묶지 않은 것입니다. 유효한 JS 객체 일 수도 그렇지 않을 수도 있습니다. 그렇지 않으면 함수가 실패하고 return false에 도달하지 않습니다.

+0

여기에 누락 된 중괄호는 코드에 있습니다. 죄송합니다. 게시물을 편집 했으므로 실수로 삭제했을 것입니다. –