zoukankan      html  css  js  c++  java
  • 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 + "
    ajaxOptions: " + ajaxOptions + "
    thrownError:"+thrownError + "
    " 
    
    +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 + "
    ajaxOptions: " + ajaxOptions + "
    thrownError:"+thrownError + "
    " 
    
    +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进行验证提示,相对比自定义异常麻烦。

  • 相关阅读:
    客户端命令行查看dubbo服务的生产者和消费者
    灰度发布
    灰度发布方法了解
    spring事务隔离级别
    小东西
    从excel表中生成批量SQL,将数据录入到数据库中
    CSV导出
    详解Java的自动装箱与拆箱(Autoboxing and unboxing)
    java多线程理解
    spring事务传播行为讲解转载
  • 原文地址:https://www.cnblogs.com/smokerBig/p/12350080.html
Copyright © 2011-2022 走看看