Django AJAX 错误:仅协议方案支持跨源请求
Posted
技术标签:
【中文标题】Django AJAX 错误:仅协议方案支持跨源请求【英文标题】:Django AJAX error: Cross origin requests are only supported for protocol schemes 【发布时间】:2016-07-19 08:17:37 【问题描述】:我收到以下关于 AJAX 调用的错误
XMLHttpRequest 无法加载 billbrain:sellbill。跨源请求仅支持协议方案:http、data、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 的 url。那么,最佳做法是什么?
【问题讨论】:
为什么会违反 DRY? DRY 就像不要重复自己一样? 【参考方案1】:您可以在包含 url 的基本模板中声明全局对象并使用 url
模板标签:
<script>
windows.ajaxUrls =
'billbrain-sellbill': % url 'billbrain:sellbill' %
</scrip>
在 js 文件中:
$.ajax(
url : window.ajaxUrl['billbrain-sellbill'],
...
);
或使用https://github.com/mlouro/django-js-utils
【讨论】:
【参考方案2】:你应该传递 csrf 令牌,你不能在 ajax 的 url 中这样写。你应该像下面的代码那样写。
如果你有内联 js。它将为您工作,否则您应该将两个变量添加到正在渲染的模板中。因为,你不能在导入的 JS 中使用 django 的变量。
这段代码只是放在模板的底部。
<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
,
);
希望它对你有用。 :)
【讨论】:
以上是关于Django AJAX 错误:仅协议方案支持跨源请求的主要内容,如果未能解决你的问题,请参考以下文章
XMLHttpRequest 跨源请求仅支持协议方案反过来服务器
XMLHttpRequest 跨源请求仅支持协议方案反过来服务器