2014-03-27 62 views
1

我想从外部JavaScript文件进行ajax调用。从外部JavaScript文件Django 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标记的语法错误。

回答

3

您已将CSRF标记放置在模板中的脚本标记内部:这没有意义,因为它本身无效。

此外,虽然它不是语法错误,但是您已经在JS文件本身内部使用了Django模板变量语法,因此该参数将作为原始字符串"{{ csrf_token }}"发送。

但是,Django文档包含了关于using CSRF with Ajax的完整说明,因此您应该遵循这些说明。

+0

谢谢。 {% csrf_token %}是一个无意义的补充,试图以“简单”的方式解决它。 –