成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

通用的js前后端交互代碼

Gilbertat / 1427人閱讀

摘要:前言在一個項目中,前后端的交互是很頻繁的。內(nèi)容提示先獲取的值,如果沒有,獲取的值。

前言

在一個項目中,前后端的交互是很頻繁的。
有的是要獲取一個數(shù)據(jù),有的是要改標一個狀態(tài),有的是需要提交用戶輸入,有的是要上傳一個文件,本文就是這么的一個代碼

/**
 * 通用的js前后端交互代碼
 * 依賴layer.js
 * ajaxPost處理本頁提交的js請求,不對返回結(jié)果做處理,只 "顯示" 或者 "刷新頁面" 或者 "跳轉(zhuǎn)"
 * ajaxGet同上,但是沒有data選項,如果有數(shù)據(jù)發(fā)送,跟隨在url中
 * ajaxFile表單文件提交
 * ajaxForm表單提交
 * 表單提交的時候,需要提交的選項用class="send-item"標識,默認必填項。
 * 內(nèi)容提示先獲取data-msg的值,如果沒有,獲取palceholder的值。
 * 如果不是必填項,需要添加no-required,即class="send-item no-required"
 * 表單帶有文件上傳的時候有兩種,一種是先上傳文件,獲得返回值即文件的存儲路徑,提交表單的時候提交文件存儲路徑,請使用ajaxForm
 * 如果文件內(nèi)容跟隨表單提交,請使用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" 頁面跳轉(zhuǎn)到"/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;
        }
    }
}

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/109460.html

相關(guān)文章

  • moky = (mock + proxy) // 一個簡潔通用前后協(xié)作工具

    摘要:現(xiàn)在一般需要分前后端,因為大量前端框架和工具鏈的涌入根源是需求復(fù)雜了,讓前端可以跟后端獨立開來。但是,無論是前端去寫模板,亦或是完全前后端分離去寫,都脫離不了與后端進行數(shù)據(jù)交互。 showImg(https://segmentfault.com/img/remote/1460000007317424?w=350&h=113); --> GitHub地址 舊石器時代,Web 開發(fā)并不會去...

    miqt 評論0 收藏0
  • 前后架子搭建

    摘要:開發(fā)語言前端前端這里使用,打包工具是后端后端使用的語言依舊是熟悉的,使用搭建后端框架。 前言 作為一名前端開發(fā)者,了解一些后端語言,成為半個全棧工程師也是最基本的(23333),就本篇文章,給大家介紹一下我的前后端目錄結(jié)構(gòu),不喜勿噴,也希望各位給我一些意見,哈哈哈。 開發(fā)語言 前端 前端這里使用react.js,打包工具是parcel 后端 后端使用的語言依舊是熟悉的node.js,使...

    mikyou 評論0 收藏0
  • WEB程序前后數(shù)據(jù)交互流程

    摘要:說明我寫這篇文章的目的其實是想科普一下基礎(chǔ)的數(shù)據(jù)傳輸和交互流程,其實也就是寫協(xié)議相關(guān)的一些東西。同樣,相對于后端程序來說也無外乎就是一大堆有一定意義的字符串,而對于腳本來說,就是表示一個數(shù)據(jù)對象。 說明 我寫這篇文章的目的其實是想科普一下基礎(chǔ)的數(shù)據(jù)傳輸和交互流程,其實也就是寫http協(xié)議相關(guān)的一些東西。而寫這篇文章也主要是源于最近和長久以來很多人問的問題都是有關(guān)于這塊的(可能問題并不是...

    oysun 評論0 收藏0
  • React同構(gòu)直出優(yōu)化總結(jié)

    摘要:同構(gòu)的關(guān)鍵要素完善的屬性及生命周期與客戶端的時機是同構(gòu)的關(guān)鍵。的一致性在前后端渲染相同的,將輸出一致的結(jié)構(gòu)。以上便是在同構(gòu)服務(wù)端渲染的提供的基礎(chǔ)條件??梢詫⒎庋b至的中,在服務(wù)端上生成隨機數(shù)并傳入到這個中,從而保證隨機數(shù)在客戶端和服務(wù)端一致。 原文地址 React 的實踐從去年在 PC QQ家校群開始,由于 PC 上的網(wǎng)絡(luò)及環(huán)境都相當好,所以在使用時可謂一帆風順,偶爾遇到點小磕絆,也能夠...

    alaege 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<