【问题标题】:Django ajax request from external javascript file来自外部 javascript 文件的 Django ajax 请求
【发布时间】:2014-05-06 10:49:31
【问题描述】:

我正在尝试从外部 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))

我试图查找它,但我遇到的唯一示例是从 Forms 调用 ajax。我想要实现的是将ajax调用的输出附加到文件中。控制台告诉我脚本标签内的 csrf 令牌存在语法错误。

【问题讨论】:

    标签: javascript ajax django django-csrf


    【解决方案1】:

    您已将 CSRF 令牌单独放置在模板的脚本标记中:这没有意义,因为它本身不是有效的 Javascript。

    此外,虽然这不是语法错误,但您在 JS 文件本身中使用了 Django 模板变量语法,它不会被解析 - 因此参数将作为原始字符串 "{{ csrf_token }}" 发送。

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

    【讨论】:

    • 谢谢。 {% csrf_token %} 更像是一个无脑的补充,试图以“简单”的方式解决它。
    猜你喜欢
    • 2017-07-05
    • 1970-01-01
    • 1970-01-01
    • 2016-11-25
    • 1970-01-01
    • 2015-01-05
    • 2017-05-12
    • 2010-09-24
    相关资源
    最近更新 更多