前言

在一个项目中,前后端的交互是很频繁的。
有的是要获取一个数据,有的是要改标一个状态,有的是需要提交用户输入,有的是要上传一个文件,本文就是这么的一个代码

/** * 通用的js前后端交互代码 * 依赖layer.js * ajaxPost处理本页提交的js请求,不对返回结果做处理,只 '显示' 或者 '刷新页面' 或者 '跳转' * ajaxGet同上,但是没有data选项,如果有数据发送,跟随在url中 * ajaxFile表单文件提交 * ajaxForm表单提交 * 表单提交的时候,需要提交的选项用class="send-item"标识,默认必填项。 * 内容提示先获取data-msg的值,如果没有,获取palceholder的值。 * 如果不是必填项,需要添加no-required,即class="send-item no-required" * 表单带有文件上传的时候有两种,一种是先上传文件,获得返回值即文件的存储路径,提交表单的时候提交文件存储路径,请使用ajaxForm * 如果文件内容跟随表单提交,请使用ajaxFile */function ajaxPost(url, data){    layer.closeAll('msg');    layer.load();    $.ajax({        url: url,        data: data,        type: 'post',        dataType: 'json',        success: function(res){            success(res);        }    })}function ajaxGet(url){    layer.closeAll('msg');    layer.load();    $.ajax({        url: url,        type: 'get',        dataType: 'json',        success: function(res){            success(res);        }    })}function ajaxFile($form,tips){    layer.closeAll('msg');    var url = $form.prop('action');    var data = new FormData();    var status = true;    $form.find('.send-item').each(function(index,elem){        if(!status){            return false;        }        var name = elem.name;        var value = elem.value;        var type = elem.type;        var msg = $(elem).data('msg') || elem.placeholder;                if(type != 'password'){            value = value.trim();        }        if(elem.type == 'checkbox' && !elem.checked){            if(tips){                layer.tips(msg, $(elem), {tips: 2, time: 1e3});            }else{                layer.msg(msg, {icon: 0, time: 1e3, maxWidth: 260});            }             status = false;        }        if(elem.type == 'file' && !elem.files[0]){            if(tips){                layer.tips(msg, $(elem).parent(), {tips: 2, time: 1e3});            }else{                layer.msg(msg, {icon: 0, time: 1e3, maxWidth: 260});            }             status = false;        }        if(status && value == '' && !$(this).hasClass('no-required')){            if(tips){                layer.tips(msg, $(elem), {tips: 2, time: 1e3});            }else{                layer.msg(msg, {icon: 0, time: 1e3, maxWidth: 260});            }             status = false;        }        if(elem.type == 'file'){            var file = elem.files[0];            data.append('upload[]', file, file.name);        }else{            data.append(name,value);        }    });    if(!status){        return false;    }    layer.load();    $.ajax({        url: url,        data: data,        type: 'post',        processData: false,        contentType: false,        dataType: 'json',        success: function(res){            success(res);        }    })}function ajaxForm($form,tips){    var url = $form.prop('action');    var data = {};    var status = true;    $form.find('.send-item').each(function(index,elem){        if(!status){            return false;        }        var name = elem.name;        var value = elem.value;        var type = elem.type;        var msg = $(elem).data('msg') || elem.placeholder;        if(type != 'password'){            value = value.trim();        }        if(elem.type == 'checkbox' && !elem.checked){            if(tips){                layer.tips(msg, $(elem), {tips: 2, time: 1e3});            }else{                layer.msg(msg, {icon: 0, time: 1e3, maxWidth: 260});            }                        status = false;        }        if(status && value == '' && !$(this).hasClass('no-required')){            if(tips){                layer.tips(msg, $(elem), {tips: 2, time: 1e3});            }else{                layer.msg(msg, {icon: 0, time: 1e3, maxWidth: 260});            }            status = false;        }        data[name] = value;    });    if(!status){        return false;    }    layer.load();    $.ajax({        url: url,        data: data,        type: 'post',        dataType: 'json',        success: function(res){            success(res);        }    })}function success(res){    /**     * @res = {status: 1, msg: '', url: ''};     * @status => 0 失败       * @status => 1 成功     * @msg => '提示'     * @url => 'reload' 页面需要刷新     * @url => '/base' 页面跳转到'/base'     */    layer.closeAll('loading');    if(res.msg){        layer.msg(res.msg, {icon: res.status, time: 2e3, maxWidth: 260}, function(){            if(res.url == 'reload'){                window.location.reload();                return false;            }            if(res.url){                                        window.location.href = res.url;            }        });    }else{        if(res.url == 'reload'){            window.location.reload();            return false;        }        if(res.url){                                    window.location.href = res.url;        }    }}