我正在尝试从外部javascript文件进行ajax调用。
ajax.js
function ajax() {
setInterval(function() {
$.ajax({
url : "/ajax_get.html",
type : "POST",
dataType: "json",
data : {
client_response : 'Y',
csrfmiddlewaretoken: '{{ csrf_token }}',
},
success : function(json) {
alert('Working');
},
error : function(xhr,errmsg,err) {
alert(xhr.status + ": " + xhr.responseText);
}
});
alert('Failing');
return false;
}, 5000);
}
包含在模板中
<script>
ajax();
{% csrf_token %}
</script>
Views.py
def ajax_request(request):
if request.POST.has_key('client_response'):
x=request.POST['client_response']
response_dict={}
response_dict.update({'server_response':'working'})
return HttpResponse(simplejson.dumps(response_dict), mimetype='application/javascript')
else:
return render_to_response('ajaxexample.html', context_instance=RequestContext(request))
我试着查一下,但是我遇到的唯一一个例子是ajax从Forms调用的。我想要实现的是将ajax调用的输出附加到文件中。控制台告诉我脚本标记内的csrf令牌存在语法错误。
答案 0 :(得分:3)
您已将CSRF令牌放置在模板中的脚本标记内:它没有意义,因为它本身不是有效的Javascript。
此外,虽然它不是语法错误,但您已经在JS文件本身内部使用了Django模板变量语法,这不会被解析 - 因此参数将作为原始文件发送字符串"{{ csrf_token }}"
。
然而,Django文档包含using CSRF with Ajax的完整说明,因此您应该遵循这些说明。