Django AJAX错误:仅支持协议方案的交叉原始请求

时间:2016-03-31 04:00:02

标签: jquery ajax django

我收到有关AJAX调用的以下错误

XMLHttpRequest无法加载billbrain:sellbill。交叉源请求仅支持协议方案:http,数据,chrome,chrome-extension,https,chrome-extension-resource。

billbrain是我的django应用程序名称,而sellbill是销售发票视图的URL名称。

以下是我的AJAX(Django)代码:

$.ajax({
        url : "billbrain:sellbill", 
        type : "POST", d
        data : { customer_code: input }, // data sent with the post request

                // handle a successful response
        success : function(json) {
            console.log(json); // log the returned json to the console
            console.log("success"); // another sanity check
        },
    });

现在,如果明确说明会违反DRY的网址。那么,最佳做法是什么?

2 个答案:

答案 0 :(得分:2)

您可以在包含网址的基本模板全局对象中声明并使用url模板标记:

<script>
    windows.ajaxUrls = {
        'billbrain-sellbill': {% url 'billbrain:sellbill' %}
    }
</scrip>

在js-file中:

$.ajax({
    url : window.ajaxUrl['billbrain-sellbill'], 
    ...
});

或使用https://github.com/mlouro/django-js-utils

答案 1 :(得分:1)

你应该传递csrf令牌,你不能在ajax的url中这样写。你应该写下面的代码。

如果你有内联js。它适用于你,否则你应该将两个变量添加到渲染模板中。因为,你不能将django的变量用于导入的JS。

此代码刚刚放入模板的底部。

<script>
 url_sellbill = '{% url 'billbrain:sellbill' %}';
 csrf_token = '{{ csrf_token }}';
</script>

下面的代码放入你的js。

$.ajax({
        url : url_sellbill,
        type : "POST", d
        data : { 
                customer_code: input,
                'csrfmiddlewaretoken': csrf_token,

        }, // data sent with the post request

        // handle a successful response
        success : function(json) {
            console.log(json); // log the returned json to the console
            console.log("success"); // another sanity check
        },
    });

希望它会对你有用。 :)