由於支持問題,未使用 es6 語法
_ajax.js
/** * 發起請求 * @param url 請求地址 * @param data 請求數據 { } json格式 * @param type 請求類型 get|post * @param success 請求成功回調方法(如果支持es6,使用 Promise 更方便) * @param fail 請求失敗回調方法 */ function jqAjax(url, data, type, success, fail) { _ajaxSetup(); // 先將 csrftoken 寫入請求頭,避免被django拒絕 $.ajax({ "url": url, "type": type, "data": data, "timeout": 5000, "beforeSend": function (xhr) { }, "success": function (res) { if (res.code === 200) { if (success) { console.log(res); success(res.data) } } else { if (fail) { fail(res) } console.log(res.code + ":" + res.message) } }, "error": function (e) { console.log(e) if (fail) { fail(e) } } }); } /** * 快捷發起get請求 * @param url 地址(因為是django項目的靜態文件,地址不需要加ip與端口) * @param data 數據 { } json * @param success 請求成功方法 * @param fail 請求失敗的方法 * @private */ function _get(url, data, success) { jqAjax(url, data, "get", success) } /** * 快捷發起post請求 * @param url 地址(因為是django項目的靜態文件,地址不需要加ip與端口) * @param data 數據 { } json * @param success 請求成功方法 * @param fail 請求失敗的方法 * @private */ function _post(url, data, success) { jqAjax(url, data, "post", success) } // 下面兩個方法主要處理django中的csrftoken驗證問題 // 將csrftoken寫入當前請求頭 function _ajaxSetup() { $.ajaxSetup({ beforeSend: function (xhr, settings) { // console.log(getCookie('csrftoken')); if (!/^(GET|HEAD|OPTIONS|TRACE)$/.test(settings.type) && !this.crossDomain) { xhr.setRequestHeader("X-CSRFToken", getCookie('csrftoken')); } } }); } function getCookie(name) { var cookieValue = null; if (document.cookie && document.cookie !== '') { var cookies = document.cookie.split(';'); for (var i = 0; i < cookies.length; i++) { var cookie = jQuery.trim(cookies[i]); // Does this cookie string begin with the name we want? if (cookie.substring(0, name.length + 1) === (name + '=')) { cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); break; } } } return cookieValue; }
如果你希望成功,當以恆心為良友,以經驗為參謀,以當心為兄弟,以希望為哨兵。——愛迪生