DWZ 自定义异常及后台校验
1.form表单提交弹出自定义异常
示例:
<form id="pagerForm" method="post" action="后台访问地址" class="pageForm required-validate" onsubmit="return validateCallback(this,dialogAjaxDonereload)"></form>
项目中默认使用:validateCallback 当前ajax提交在 dwz.ajax.js中,部分源码:
var _submitFn = function(){ $.ajax({ type: form.method || ‘POST‘, url:$form.attr("action"), data:$form.serializeArray(), dataType:"json", cache: false, success: callback || DWZ.ajaxDone, error: DWZ.ajaxError }); };
DWZ.ajaxError 会返回服务器异常信息在dwz.core.js 其中源码如下:
ajaxError:function(xhr, ajaxOptions, thrownError){ if (alertMsg) { alertMsg.error("<div>Http status: " + xhr.status + " " + xhr.statusText + "</div>" + "<div>ajaxOptions: "+ajaxOptions + "</div>" + "<div>thrownError: "+thrownError + "</div>" + "<div>"+xhr.responseText+"</div>"); } else { alert("Http status2: " + xhr.status + " " + xhr.statusText + "\najaxOptions: " + ajaxOptions + "\nthrownError:"+thrownError + "\n" +xhr.responseText); } }
在上面源码下新增一个DWZ出现error的信息,抛出自定义异常的时候只返回异常文本信息:
ajaxErrorMsg:function(xhr, ajaxOptions, thrownError){ if (alertMsg) { alertMsg.info("<div>"+xhr.responseText+"</div>"); } else { alert("Http status2: " + xhr.status + " " + xhr.statusText + "\najaxOptions: " + ajaxOptions + "\nthrownError:"+thrownError + "\n" +xhr.responseText); } }
在dwz.ajax.js中复制一份validateCallback 的源码 修改方法名validateCallbackMsg,修改error的调用 使用刚刚新增的ajaxErrorMsg:
var _submitFn = function(){ $.ajax({ type: form.method || ‘POST‘, url:$form.attr("action"), data:$form.serializeArray(), dataType:"json", cache: true, success: callback || DWZ.ajaxDone, error: DWZ.ajaxErrorMsg }); };
使用时直接使用validateCallbackMsg
2.A 连接抛出自定义异常
示例:
<a id="id" class="edit" href="后台地址" target="ajaxTodo">下发通知</a>
提交后会通过target中的ajaxTodo方法进行提交:ajaxTodo 是dwz.ajax.js中,新增ajaxTodoMsg:
function ajaxTodo(url, callback){ console.info(11111111111111111112); var $callback = callback || navTabAjaxDone; if (! $.isFunction($callback)) $callback = eval(‘(‘ + callback + ‘)‘); $.ajax({ type:‘POST‘, url:url.split(‘?‘)[0], data:url.split(‘?‘)[1], dataType:"json", cache: false, success: $callback, error: DWZ.ajaxError }); } function ajaxTodoMsg(url, callback){ var $callback = callback || navTabAjaxDone; if (! $.isFunction($callback)) $callback = eval(‘(‘ + callback + ‘)‘); $.ajax({ type:‘POST‘, url:url.split(‘?‘)[0], data:url.split(‘?‘)[1], dataType:"json", cache: false, success: $callback, error: DWZ.ajaxErrorMsg }); }
jquery扩展,在$.fn.extend中,修改后的如下:
$.fn.extend({ ajaxTodo:function(){ return this.each(function(){ var $this = $(this); $this.click(function(event){ var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first")); DWZ.debug(url); if (!url.isFinishedTm()) { alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg")); return false; } var title = $this.attr("title"); if (title) { alertMsg.confirm(title, { okCall: function(){ ajaxTodo(url, $this.attr("callback")); } }); } else { ajaxTodo(url, $this.attr("callback")); } event.preventDefault(); }); }); },ajaxTodoMsg:function(){ return this.each(function(){ var $this = $(this); $this.click(function(event){ var url = unescape($this.attr("href")).replaceTmById($(event.target).parents(".unitBox:first")); DWZ.debug(url); if (!url.isFinishedTm()) { alertMsg.error($this.attr("warn") || DWZ.msg("alertSelectMsg")); return false; } var title = $this.attr("title"); if (title) { alertMsg.confirm(title, { okCall: function(){ ajaxTodoMsg(url, $this.attr("callback")); } }); } else { ajaxTodoMsg(url, $this.attr("callback")); } event.preventDefault(); }); }); } });
上面源码 新增了一个ajaxTodoMsg 其中的ajaxTodoMsg调用在dwz.ui.js
if ($.fn.ajaxTodo) $("a[target=ajaxTodo]", $p).ajaxTodo();
if ($.fn.ajaxTodoMsg) $("a[target=ajaxTodoMsg]", $p).ajaxTodoMsg();
3 需要a连接提交方法前后台先验证如下修改:
//dialogs 其他a链接[target=dialog] target属性值不同的一样用此方法修改
$("a[target=dialog]", $p).each(function(){ $(this).click(function(event){ var $this = $(this); //打开前的数据校验。 使用Validation属性 Validation=“A()” var _callback = $this.attr("Validation"); if (_callback != undefined && !$.isFunction(_callback)) { _callback = eval("("+_callback+")" ); if (!_callback) return false; } ....................省略.........................
使用方法 在A连接上增加:Validation=“A()”
A()为js方法,JS中异步访问后台校验方法,返回 Boolean
JS中的Ajax后台校验对返回的false进行验证提示,相对比自定义异常麻烦。