문제는 양식을 제출할 때 실제 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),
...
저는 약간 혼란 스럽습니다. 문제는 그것이/feedback /가 당신의 jQuery에 게시하는 것을 제외하고 있다는 것입니다. – Kekoa
예, 의견을 보내고 싶지만 다른 페이지에 응답을 표시하지 마십시오. –