Django AJAX error: Cross origin requests are only supported for protocol schemes
我收到有关AJAX调用的以下错误
XMLHttpRequest无法加载billbrain:sellbill。 交叉源请求仅支持协议方案:http,data,chrome,chrome-extension,https,chrome-extension-resource。
billbrain是我的django应用程序名称,而sellbill是销售发票视图的URL名称。
以下是我的AJAX(Django)代码:
1 2 3 4 5 6 7 8 9 10 11 | $.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的网址。 那么,最佳做法是什么?
您可以在包含URL的基本模板全局对象中声明并使用
1 2 3 4 | windows.ajaxUrls = { 'billbrain-sellbill': {% url 'billbrain:sellbill' %} } </scrip> |
在js文件中:
1 2 3 4 | $.ajax({ url : window.ajaxUrl['billbrain-sellbill'], ... }); |
或者使用https://github.com/mlouro/django-js-utils
你应该传递csrf令牌,你不能在ajax的url中这样写。 你应该写下面的代码。
如果你有内联js。 它适用于你,否则你应该将两个变量添加到渲染模板中。 因为,你不能将django的变量用于导入的JS。
这段代码只是放在模板的底部。
1 2 | url_sellbill = '{% url 'billbrain:sellbill' %}'; csrf_token = '{{ csrf_token }}'; |
下面的代码放入你的js。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | $.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 }, }); |
希望它能为你效劳。:)