layui table數據表格渲染前回調(重寫layui的ajax執行前回調)

layui版本:2.5.4

起因:

今天對舊框架進行版本升級改造,找遍整個layui開發文檔以及其他解決方案,竟然沒有table相關的渲染前回調執行前回調函數;通過閱讀開發文檔,發現layui默認起始頁page=1&limit=10,而後端使用mysql查詢時用到的分頁語句需要的是limit 0,10,結果就導致了前後端分頁起始頁不匹配,爲了在開發過程中避免過多的浪費時間在這些小事情上,於是做了統一處理,在layui的ajax請求執行前做url處理,方案如下:

方案:

將代碼拷貝到<script> </script>標籤內,注意是放在layui.js引入文件後面(可納入封裝好的通用工具文件中去),代碼:

<script src="js/layui-v2.5.4/layui.js" charset="utf-8"></script>
<script type="text/javascript">
	//重寫layui的Ajax請求
	if (!(typeof layui == "undefined")) {
	    layui.use(['layer', 'jquery'], function () {
	        var layer = layui.layer,
	            $ = layui.jquery;
	        //首先備份下jquery的ajax方法
	        var _ajax = $.ajax;
	        //重寫jquery的ajax方法
	        var flashLoad;
	        $.ajax = function (opt) {
	            //備份opt中error和success方法
	            var fn = {
	                error: function (XMLHttpRequest, textStatus, errorThrown) {
	                },
	                success: function (data, textStatus) {
	                }
	            }
	            if (opt.error) {
	                fn.error = opt.error;
	            }
	            if (opt.success) {
	                fn.success = opt.success;
	            }
	            //擴展增強處理
	            var _opt = $.extend(opt, {
	                error: function (XMLHttpRequest, textStatus, errorThrown) {
	                    //錯誤方法增強處理
	                    if ('TIMEOUT' == XMLHttpRequest.getResponseHeader('SESSIONS_TATUS')) {
	                        parent.window.parent.window.location.href = XMLHttpRequest.getResponseHeader('content_path');
	                    }
	                    fn.error(XMLHttpRequest, textStatus, errorThrown);
	                },
	                success: function (data, textStatus) {
	                    //成功回調方法增強處理
	                    if (-1 == data.status || '-1' == data.status || 0 == data.status || '0' == data.status) {
	                        return layer.msg(data.tip);
	                    }
	                    fn.success(data, textStatus);
	                },
	                beforeSend: function (XHR, response) {
	                    /**
	                     * 修復layui分頁bug,pageNum屬性-1適應後端查詢
	                     */
	                    var urlParams = util.url.getUrlAllParams(response.url);
	                    if (urlParams && urlParams.pageNum) {
	                        var urlIndex = response.url.substring(0, response.url.indexOf('?') + 1);
	                        urlParams.pageNum = urlParams.pageNum-1;
	                        for (var item in urlParams) {
	                            urlIndex += (item + '=' + urlParams[item]) + '&';
	                        }
	                        response.url = urlIndex.substring(0, urlIndex.length-1);
	                    }
	                    //提交前回調方法
	                    flashLoad = layer.load(0, {shade: [0.7, '#393D49']}, {shadeClose: true}); //0代表加載的風格,支持0-2
	                },
	                complete: function (XHR, TS) {
	                    //請求完成後回調函數 (請求成功或失敗之後均調用)。
	                    layer.close(flashLoad);
	                }
	            });
	            return _ajax(_opt);
	        }
	    });
	};
</script>

結語:

如果這個方案對您有用,請在右上方點個贊;如果有任何疑問,可以留言,小編會在24小時內及時回覆!如果你想汲取小編更多的精華,請關注小編!`



在這裏插入圖片描述

持續更新中…

如有對思路不清晰或有更好的解決思路,歡迎與本人交流,QQ羣:273557553

你的提問是小編創作靈感的來源!
































發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章