解決方法有二:
第一是用 get, 例如:
$.getJSON('/account/email_verify/', {account_id: $("#account").val(), email:"{{email}}" }, function(data){
console.log(data); // print returned data
});
get 方法是最直覺簡單的
第二方法是用 jquery 從 cookie 取 csrf 值, 方法如下:
到這個地方下載 jquery 的 cookie plugin
然後把 你下載的 jquery.cookie.js include 到你的 html 頁面中
<script src="{% static "js/jquery.cookie.js" %}"></script>
並將以下這段加到你的 html 頁面中
這段程式碼將會設定 ajax 在 before send 前跟 django 系統要求合法 csrf token
function csrfSafeMethod(method) {
// these HTTP methods do not require CSRF protection
return (/^(GET|HEAD|OPTIONS|TRACE)$/.test(method));
}
$.ajaxSetup({
beforeSend: function(xhr, settings) {
if (!csrfSafeMethod(settings.type) && !this.crossDomain) {
xhr.setRequestHeader("X-CSRFToken", $.cookie('csrftoken'));
}
}
});
終於到了 post 的步驟
jquery 有 getJSON, 但卻沒有 postJSON ,但是,沒關係我們可以用 $.post(URL, PARAM, CALLBACK, 'json') 來辦到 (同效)
$.post("/account/email_verify/", {account_id: $("#account").val(), email:"{{email}}" }, function(data, textStatus) {
if (textStatus == "success")
console.log("success...")
else
console.log("fail...")
console.log(data);
}, "json");
參考資料:https://docs.djangoproject.com/en/dev/ref/csrf/
沒有留言:
張貼留言