我收到有关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的网址。那么,最佳做法是什么?
答案 0 :(得分:2)
您可以在包含网址的基本模板全局对象中声明并使用url
模板标记:
<script>
windows.ajaxUrls = {
'billbrain-sellbill': {% url 'billbrain:sellbill' %}
}
</scrip>
在js-file中:
$.ajax({
url : window.ajaxUrl['billbrain-sellbill'],
...
});
答案 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
},
});
希望它会对你有用。 :)