1. 程式人生 > >MVC前端與後端校驗

MVC前端與後端校驗

<1>首先是在專案中新增一個ADO.NET實體資料模型,選擇MemberInfo表 他會自動在模型裡面生成一個MemberInfo的類,也會生成一個對應的實體類DataBaseEntities。用的時候只有用模型裡的MemberInfo類和DataBaseEntities就好了。 不需再額外新增MemberInfo類了  【注意:這個DataBaseEntities 是你的資料庫名字+Entities】

<2>現在要寫使用者註冊的功能。MemberInfo類(資料表)裡有很多欄位的,而我們註冊只需要用到 Mobile 和 Email 和Pwd欄位 所以這裡。我們單獨建立一個Member的類 ,類裡面有註冊要用到的欄位。如Email,Moblie Pwd ,RePwd ,Vcode等欄位。

<3> 然後我們給Index 新增強型別檢視,檢視資料類就選擇我們要進行註冊的這個 Member類就好了。

<4>  當用戶填寫完資料點選提交的時候,我們再把Member類對應的欄位 賦值給MemberInfo欄位對應的欄位 。然後對MemberInfo進行跟新到資料儲存資料

大概流程是:bigTreeEntities db = new bigTreeEntities();

namespace bigtree.Controllers
{
    public class AccountController : Controller
    {
        //
        // GET: /register/

        bigTreeEntities db = new bigTreeEntities();
       
        [HttpPost]
        public ActionResult Register(Member member) //Member是用於註冊的類。生成強型別檢視,選擇的檢視資料類就是Member。使用者填寫的資料的值其實就是賦給Member類的相應欄位的
        {
	    //Member是一個註冊要用到的類。Member類裡有註冊要用到的所有欄位
            
            MemberInfo info = new MemberInfo();   //MemberInfo是資料實體類。新增實體的時候,選擇的表,自動生成的對應的類
            info.mobile = member.Mobile; //將註冊類Member的欄位賦值賦值給實體類MemberInfo對應的欄位
            info.email = member.Email;
            info.pwd = EncryptNoPrefix(member.Pwd);  //對密碼進行MD5加密
            
            //bigTreeEntities con = new bigTreeEntities();
            //db.AddToMemberInfo(info);  // 用於向 MemberInfo EntitySet 新增新物件的方法,已棄用 。改成下面的b.MemberInfo.AddObject(info);

            db.MemberInfo.AddObject(info); //將物件新增到當前實體集中的物件上下文。
            db.SaveChanges(); // 將所有更新儲存到資料來源並重置物件上下文中的更改跟蹤。

            return RedirectToAction("Index", "Login"); //跳轉到Login控制器下的Index方法

        }

    }
}

======================================================言歸正傳,下面開始做

Account控制器

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using bigtree.ViewModel;
using System.Security.Cryptography;
using bigtree.Actions;
using System.Text.RegularExpressions;
using Peer._128uu.DAL.Models;

namespace bigtree.Controllers
{
    public class AccountController : Controller
    {
        //
        // GET: /register/

        bigTreeEntities db = new bigTreeEntities();
        public ActionResult Index()
        {

            
            return View();
        }

        /// <summary>
        /// MD5加密
        /// </summary>
        /// <param name="encField">要加密的欄位</param>
        /// <returns></returns>
        public static string EncryptNoPrefix(string encField)
        {
            //input = mixtureSeed + input;  
            System.Security.Cryptography.MD5 md5 = new MD5CryptoServiceProvider();
            byte[] datSource = System.Text.Encoding.Default.GetBytes(encField);
            byte[] newSource = md5.ComputeHash(datSource);
            string byte2String = null;
            for (int i = 0; i < newSource.Length; i++)
            {
                string thisByte = newSource[i].ToString("x");
                if (thisByte.Length == 1) thisByte = "0" + thisByte;
                byte2String += thisByte;
            }
            return byte2String;
        }

        /// <summary>
        /// 通過get請求跳到這個頁面的時候直接進入Index頁面。
        /// </summary>
        /// <returns></returns>
        public ActionResult Register()
        {
            return View("Index");
        }

        /// <summary>
        /// 後臺驗證寫在這個Post請求的註冊方法中,在驗證全部通過後將資料儲存到資料
        /// </summary>
        /// <param name="member">Member是用於註冊的類。生成強型別檢視,選擇的檢視資料類就是Member。使用者填寫的資料的值其實就是賦給Member類的相應欄位的</param>
        /// <returns></returns>
        [HttpPost]
        public ActionResult Register(Member member)
        {
            if (string.IsNullOrWhiteSpace(member.Mobile))
            {
                ViewData["errorMobile"] = "手機號碼不能為空";
                return View("Index");
            }
            if (!Regex.IsMatch(member.Mobile, @"^(((13[0-9]{1})|(15[0-9]{1})|(18[0-9]{1}))+\d{8})$"))
            {
                ViewData["errorMobile"] = "手機號碼已存在或格式不正確";
                return View("Index");                
            }

            //Any:確定序列中的任何元素是否存在或滿足條件,如果滿足條件,則返回true,否則返回false;
            //db.MemberInfo.Any(x => x.mobile == member.Mobile)的返回值是一個bool值

            //檢查使用者輸入的手機號碼( member.Mobile是否在資料庫中也有同樣的手機號碼(x.mobile))
            var queryMobile = db.MemberInfo.Any(x => x.mobile == member.Mobile); 
            if (queryMobile)
            {
                ViewData["errorMobile"] = "手機號碼已存在";
                return View("Index");
            }
                                
            
            if (string.IsNullOrWhiteSpace(member.Email))
            {
                ViewData["errorEmail"] = "手機號碼不能為空";
            }
            if (!Regex.IsMatch(member.Email, @"^(\w)+(\.\w+)*@(\w)+((\.\w+)+)$"))
            {
                ViewData["errorEmail"] = "郵箱格式錯誤,請重新輸入";
                return View("Index");
            }
            var queryEmail = db.MemberInfo.Any(x => x.email == member.Email);
            if (queryEmail)
            {
                ViewData["errorEmail"] = "電子郵箱已存在";
                return View("Index");
            }

            if (string.IsNullOrWhiteSpace(member.Pwd))
            {
                ViewData["errorPwd"] = "密碼不能為空";
                return View("Index");
            }
            if (member.Pwd.Length < 6)
            {
                ViewData["errorPwd"] = "密碼不能少於6位";
                return View("Index");
            }
            if (member.RePwd != member.Pwd)
            {
                ViewData["errorRePwd"] = "密碼不一致,請重新輸入";
                return View("Index");
            }
            if (member.Vcode != Session["ValidateCode"].ToString())
            {
                ViewData["errorCode"] = "驗證碼錯誤,請重新輸入";
                return View("Index");
            }


            MemberInfo info = new MemberInfo();//MemberInfo是資料實體類。新增實體的時候,選擇的表,自動生成的對應的實體類

            //Member是一個註冊要用到的類。Member類裡有註冊要用到的所有欄位
            info.mobile = member.Mobile; //將註冊類Member的欄位賦值賦值給實體類MemberInfo對應的欄位
            info.email = member.Email;
            info.pwd = EncryptNoPrefix(member.Pwd);  //對密碼進行MD5加密
            
            //bigTreeEntities con = new bigTreeEntities();
            //db.AddToMemberInfo(info);  // 用於向 MemberInfo EntitySet 新增新物件的方法,已棄用 。改成下面的b.MemberInfo.AddObject(info);

            db.MemberInfo.AddObject(info); //將物件新增到當前實體集中的物件上下文。
            db.SaveChanges(); // 將所有更新儲存到資料來源並重置物件上下文中的更改跟蹤。

            return RedirectToAction("Index", "Login"); //跳轉到Login控制器下的Index方法

        }


        public ActionResult CheckMobile(string mobile)
        {
            var queryMobile = db.MemberInfo.Any(x => x.mobile == mobile);
            if (queryMobile)
            {
                return Json("{success:false,message:'手機號碼已經存在'}", JsonRequestBehavior.AllowGet);
            }
            return Json("{success:true,message:'手機號碼可以使用'}", JsonRequestBehavior.AllowGet);
        }

        public ActionResult CheckEmail(string email)
        {
            var queryEmail = db.MemberInfo.Any(x => x.email == email);
            if (queryEmail)
            {
                return Json("{success:false,message:'Email已經存在'}", JsonRequestBehavior.AllowGet);
            }
            return Json("{success:true,message:'Email可以使用'}", JsonRequestBehavior.AllowGet);
        }

        //驗證碼生成器。
        public ActionResult GetValidateCode()
        {
            ValidateCode vCode = new ValidateCode();
            string code = vCode.CreateValidateCode(5);
            Session["ValidateCode"] = code;
            byte[] bytes = vCode.CreateValidateGraphic(code);
            return File(bytes, @"image/jpeg");
        }

    }
}


Index檢視
<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<bigtree.ViewModel.Member>" %>

<!DOCTYPE HTML>
<html>
<head>
    <meta http-equiv="content-type" content="text/html;charset=utf-8" />
    <meta name="keywords" content="關鍵詞1,關鍵詞2,關鍵詞3" />
    <meta name="description" content="對網站的描述" />
    <title>網站</title>
    <link href="../../Html/css/style.css" rel="stylesheet" type="text/css" />
    <link href="../../Html/css/register.css" rel="stylesheet" type="text/css" />
    <script src="../../Html/js/jquery-1.8.3.min.js" type="text/javascript"></script>
    <script src="../../Html/js/js.js" type="text/javascript"></script>
    <script src="../../Scripts/jquery.validate.min.js" type="text/javascript"></script>
    <style type="text/css">
 
    </style>

        <script type="text/javascript">

            //將字串轉換成Json
            function strToJson(str) {
                var json = eval('(' + str + ')');
                return json;
            }


            $(function () {

                //手機號碼驗證
                jQuery.validator.addMethod("isMobile", function (value, element) {
                    var tel = /13[0-9]{9}$|15[0-9]{9}$|18[0-9]{9}$/;
                    var isPass = this.optional(element) || (tel.test(value));

                    if (isPass) {
                        $.ajax({
                            url: "/Account/CheckMobile",
                            data: { mobile: $("#Mobile").val() },
                            dataType: "Json",

                            async: false,
                            success: function (data) {
                                //alert(data)
                                var dataNews = strToJson(data)
                                isPass = dataNews.success;
                                //alert(isPass);
                                //$("#lableMobile").text(dataNews.message);
                            }
                        });
                    }
                    //alert(isPass);
                    return isPass;
                }, "請正確填寫您的手機號碼");


                //E-mail驗證
                jQuery.validator.addMethod("isEmailUsed", function (value, element) {
                    var f = false;

                    $.ajax({
                        url: "/Account/CheckEmail",
                        data: { email: $("#Email").val() },
                        async: false,
                        success: function (res) {                          
                            var resNews = strToJson(res);
                            f = resNews.success;
                        }
                    });
                    return f;
                }, "請使用其他郵箱");



                $('form').validate({
                    rules: {

                        Mobile: {
                            required: true,
                            isMobile: true
                        },
                        Email: {
                            required: true,
                            email: true,
                            isEmailUsed: true

                        },
                        Pwd: {
                            required: true,
                            minlength: 6
                        },
                        RePwd: {
                            required: true,
                            equalTo: '#Pwd'
                        },
                        valiCode: {
                            required: true
                        }
                    },
                    messages: {
                        Mobile: {
                            required: "請輸入手機號碼",
                            isMobile: "手機號碼已存在或格式不正確"
                        },
                        Email: {
                            required: "請輸入郵箱",
                            email: "郵箱格式錯誤,請重新輸入",
                            isEmailUsed: "郵箱已經存在"
                        },
                        Pwd: {
                            required: "請填寫密碼",
                            minlength: "密碼不能少於6位"
                        },
                        RePwd: {
                            required: "請重複輸入密碼",
                            equalTo: '密碼不一致,請重新輸入'
                        },
                        valiCode: {
                            required: "請輸入驗證碼"
                        }
                    },
                    submitHandler: function (form) {
                        form.submit();
                    }

                });

            });
</script>
</head>
<body>
    <% using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @id="form1",@name="form1" }))
       {%>
    <%: Html.ValidationSummary(true)%>
    <!--頂部+logo+導航-->
    <div class="logo_box">
        <div id="logo">
            <a title="我的王網">我的王網官網</a></div>
    </div>
    <!---->
    <div class="registerCon">
        <h2>
            註冊新會員<span class="oldUser">已有賬戶?<a href="../../Html/login.html">直接登入</a></span></h2>
        <ul class="registerForm">
            <li>
                <p class="registerTil">
                    手機號:</p>
                <div class="setterBd">
                    <%: Html.TextBoxFor(model => model.Mobile, new { @class = "setterInput fl",@id="Mobile" })%>
                   
                    <%--<div class="setterExplain" id="lableMobile">
                        可用作登入名</div>--%>
                </div>
            </li>
            <li>
                <p class="registerTil">
                    Email:</p>
                <div class="setterBd">
                    <%: Html.TextBoxFor(model => model.Email, new { @class = "setterInput fl",@id="Email" })%>

                    <%--<div class="setterExplain" id="lableEmail">
                        可用作登入名</div>--%>
                </div>
            </li>
            <li>
                <p class="registerTil">
                    密碼:</p>
                <div class="setterBd">
                    <%: Html.PasswordFor(model => model.Pwd, new { @class = "setterInput fl newPassword" })%>
                    <%--<%:Html.ValidationMessageFor(model => model.Pwd)%>--%>
                    <%--<div class="setterExplain" id="lablePwd">
                        請設定您的登入密碼</div>--%>
                   
                    <ul class="strength">
                        <li class="low">弱</li>
                        <li class="mid">中</li>
                        <li class="hig">強</li>
                    </ul>
                </div>
            </li>
            <li>
                <p class="registerTil">
                    請再次輸入密碼:</p>
                <div class="setterBd">
                    <%: Html.PasswordFor(model => model.RePwd, new { @class = "setterInput fl" })%>
                    <%:Html.ValidationMessageFor(model => model.RePwd)%>
                    <div class="setterExplain error" id="lableErrorPwd">
                        </div>
                </div>
            </li>
            <li>
                <p class="registerTil">
                    請輸入驗證碼:</p>
                <div class="setterBd">
                    <input type="text" class="setterInput fl vCode" id="valiCode" name="valiCode" />
                    <div class="setterExplain">
                        <a>
                            <img src="../../Images/yangzhengma_03.png" alt="驗證碼"/>看不清?換一張</a></div>
                </div>
            </li>
        </ul>
        <input id="submit" type="submit" value="立即註冊" class="registerBtn" />
    </div>
    <% } %>
</body>
</html>

ViewModel 註冊類

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;

namespace bigtree.ViewModel
{
    public class Member
    {
     
        /// <summary>
        /// 使用者手機
        /// </summary>
        //[Required(AllowEmptyStrings = false, ErrorMessage = "手機號碼不能為空")] 
        //[RegularExpression(@"^1[3|4|5|8][0-9]\d{4,8}$",ErrorMessage="手機號碼不正確")]
        public string Mobile { get; set; }


        /// <summary>
        /// 密碼
        /// </summary>
        //[DataType(DataType.Password)]
        //[StringLength(12, MinimumLength = 6, ErrorMessage = "密碼長度必須在{2}和{1}位之間")] 
        //[Required(AllowEmptyStrings=false,ErrorMessage="密碼不能為空")]  
         public string Pwd { get; set; }

        /// <summary>
        /// 密碼
        /// </summary>
        //[DataType(DataType.Password)] //將密碼已*號的形式來顯示  
        //[Required(AllowEmptyStrings = false, ErrorMessage = "密碼不能為空")]
        public string RePwd { get; set; }


        /// <summary>
        /// 電子郵箱
        /// </summary>
        //[Required(ErrorMessage = "郵箱不能為空")]
        //[RegularExpression(@"[A-Za-z0-9._%+-][email protected][A-Za-z0-9]+\.[A-Za-z]{2,4}", ErrorMessage = "{0}的格式不正確")]
        public string Email { get; set; }

        /// <summary>
        /// 驗證碼
        /// </summary>
        public string Vcode { get; set; }

       
    }
}


<2>前段Validate校驗

@model ZuCheMvcApp.Models.CR_BC_BRAND_SERIES

@{
    Layout = null;
}


<!DOCTYPE html>

<html>
<head>
    <meta name="viewport" content="width=device-width" />
    <title>Create</title>
    <script src="~/Scripts/jquery-1.10.2.min.js"></script>
    <link href="~/third-party/easyui/jquery-easyui-1.4.1/themes/default/easyui.css" rel="stylesheet" />
    <link href="~/third-party/easyui/css/default.css" rel="stylesheet" />
    <script src="~/third-party/uploadify-v3.2.1/jquery.uploadify.min.js"></script>
    <link href="~/third-party/uploadify-v3.2.1/uploadify.css" rel="stylesheet" />
    <script src="~/Scripts/jquery.validate.js"></script>
</head>
<body>
    @using (Html.BeginForm("Create", "Bc_Brand_Series", FormMethod.Post, new {@id="form1",@name="form1"}))
    {
        @Html.AntiForgeryToken()

        <div class="panel" style="display: block; width: 400px;">
            <div class="panel-header">
                <div class="panel-title">品牌車系</div>
            </div>

            <div class="easyui-panel panel-body">
                <table>
                    <tr><th>汽車品牌編號</th><td>@Html.TextBoxFor(model => model.CR_BC_BRAND_ID)</td></tr>
                    <tr><th>品牌車系名稱</th><td>@Html.TextBoxFor(model => model.SERIES_NAME)</td></tr>
                    <tr><th>展示圖片</th>
                    @*<td>@Html.EditorFor(model => model.SERIES_PIC)</td>*@
                        <td style="width:300px;padding-top:10px;">
                            <input type="text" id="PIC_NAME" name="SERIES_PIC" style="display:none;" />
                            <span id="uploadify"></span>
                            <div>
                                <img id="ImgResult" style="max-width: 300px; max-height: 150px; display:none;" />
                            </div>
                        </td>
                    </tr>
                    <tr><th>不計免賠服務價格</th><td>@Html.TextBoxFor(model => model.CDW_COST)</td></tr>
                    <tr><th>保險費</th><td>@Html.TextBoxFor(model => model.INSURANCE_COST)</td></tr>
                    <tr><th>建立人</th><td>@Html.TextBoxFor(model => model.CREATOR_ID)</td></tr>
                    <tr><th>建立時間</th><td><input type="text" name="CREATED_TIME" value="@DateTime.Now.ToString()" /></td></tr>
                    <tr style="display:none"><th>修改時間</th><td><input type="text" name="UPDATE_TIME" value="@DateTime.Now.ToString()" /></td></tr>
                    <tr><td><input type="submit" value="確定" class="btn btn-default" /></td><td>@Html.ActionLink("返回列表", "Index")</td></tr>
                </table>
            </div>
        </div>
    }
    </body>
</html>

<script type="text/javascript">
        $(function () {
            $('#uploadify').uploadify({
                uploader: '/Bc_Brand_Series/PicUpload',// 伺服器端處理地址
                swf: '/third-party/uploadify-v3.2.1/uploadify.swf',
                width: 60,
                height: 23,
                buttonText: "瀏  覽",
                buttonClass: "uploadify-button-new",
                fileTypeExts: "*.jpg;*.jpeg;*.png",
                fileTypeDesc: "請選擇 jpg jpeg png 檔案",
                fileSizeLimit: "4MB",
                multi: false,
                onUploadStart: function (file) {
                    $("#uploadify").uploadify("settings", "formData", {@foreach (string k in Request.Cookies.AllKeys)
                    {
                        @:'[email protected](k)': '@Request.Cookies[k].Value',
                                                }'': ''
                    });
                },
                onSelectError: function (file, errorCode, errorMsg) {
                    switch (errorCode) {
                        case -110:
                            //alert($("#uploadify").uploadify("fileSizeLimit"));
                            alert("檔案 [" + file.name + "] 大小超出系統限制的" + jQuery('#uploadify').uploadify('settings', 'fileSizeLimit') + "大小!");
                            break;
                    }
                },
                onUploadSuccess: function (file, data, response) {
                    if (data != "") {
                        $("#ImgResult").show().attr("src", "/upload/car_brand_series/" + data);
                        $("#PIC_NAME").val(data);
                        //$("#IMG_URL").val(data);
                    }
                }
            });

        });
</script>

<script type="text/javascript">
    $(function () {
        $("#form1").validate({
            rules: {
                CR_BC_BRAND_ID: { required: true },
                SERIES_NAME: { required: true },
                SERIES_PIC: { required: true },
                CDW_COST: { required: true },
                INSURANCE_COST: { required: true },
                CREATOR_ID: { required: true },
                CREATED_TIME: { required: true },
                UPDATE_TIME: { required: true }
            },
            messages: {
                CR_BC_BRAND_ID: { required: "不能為空" },               
                SERIES_NAME: { required: "*" },
                SERIES_PIC: { required: "*" },
                CDW_COST: { required: "*" },
                INSURANCE_COST: { required: "*" },
                CREATOR_ID: { required: "*" },
                CREATED_TIME: { required: "*" },
                UPDATE_TIME: { required: "*" }
            },
            submitHandler: function (form) {
                //form.submit();
                alert("111");
            }

        });
    });

</script>


相關推薦

MVC前端

<1>首先是在專案中新增一個ADO.NET實體資料模型,選擇MemberInfo表 他會自動在模型裡面生成一個MemberInfo的類,也會生成一個對應的實體類DataBaseEntities。用的時候只有用模型裡的MemberInfo類和DataBaseEn

前端

後端驗證是為了保證安全,前端驗證是為了讓使用者體驗更好。 必須在後端校驗的 唯一性驗證,驗證碼,敏感詞,出錯概率高的要做非同步校驗。 後端校驗可以防止介面被私自呼叫導致破壞資料庫結構;避免有人模擬瀏覽器行為直接給伺服器發請求。 有必要在前端校驗的 必填項、(郵

MVC框架(二)----前端MVC、MVVM等設計模式區別聯絡

        上篇文章中提到了前端的框架分類,其中前端JS框架中有些是MVC設計模式,但是java和dotNET平臺也有自己的MVC也有自己的設計模式,這兩類有什麼區別呢,好多猿們甚是不解,旁徵博引

JSR303 包的使用

class valid repos mapping org employee errors 提示信息 .post 1.首先通過Maven導入JSR303架包。 <!-- https://mvnrepository.com/artifact/org.hibernate

JSR303

空檢查 @Null       驗證物件是否為null @NotNull    驗證物件是否不為null, 無法查檢長度為0的字串 @NotBlank 檢查約束字串是不是Null還有被Trim的長度是否大於0,

前端介面的互動案例

一、案例描述 1,前端頁面提供使用者名稱,密碼輸入框。  2,通過Ajax傳送請求到後端Serlvet。  3,後端Serlvet處理請求,根據輸入的使用者名稱和密碼返回給前端不同資訊 前端訪問後端介面通過後端提供的的URL 二、主要程式碼 1、前端頁面 <!

Web-API請求前端對應分析

api請求分析 Http請求的頭部: 1.前端 ContentType="application/x-www-form-urlencoded" Request URL:http://apidem

使用spring validation完成資料

前言 資料的校驗是互動式網站一個不可或缺的功能,前端的js校驗可以涵蓋大部分的校驗職責,如使用者名稱唯一性,生日格式,郵箱格式校驗等等常用的校驗。但是為了避免使用者繞過瀏覽器,使用http工具直接向後端請求一些違法資料,服務端的資料校驗也是必要的,可以防止髒資

springmvc中@Valid註解

@Valid註解用於校驗,所屬包為:javax.validation.Valid。① 首先需要在實體類的相應欄位上新增用於充當校驗條件的註解,如:@Min,如下程式碼(age屬於Girl類中的屬性):@Min(value = 20,message = "結婚年齡限制")  p

前端互動

具體 IP埠 視情況而定    續作修改  經供參考 前端提交表單的形式共有2中:              get  將網址與表單內容做拼接成url 一起提交  

學習Spring Boot:(十)使用hibernate validation完成資料

前言 後臺資料的校驗也是開發中比較注重的一點,用來校驗資料的正確性,以免一些非法的資料破壞系統,或者進入資料庫,造成資料汙染,由於資料檢驗可能應用到很多層面,所以系統對資料校驗要求比較嚴格且追求可變性及效率。 瞭解 瞭解一點概念性的東東。 * JSR 3

js 解析json 常用方法 --前端的互動(前端

(1)前端js解析前端json資料: one: javascript定義json物件變數: var jsonobject={};//可以不使用宣告,推薦宣告一下,嚴格一些,最好使用嚴格模式 賦值json物件的key-value值: jsonobject[key]=v

web前端的區別

Internet採用超文字和超媒體的資訊組織方式,將資訊的連結擴充套件到整個Internet上。Web就是一種超文字資訊系統,Web的一個主要的概念就是超文字連線,它使得文字不再象一本書一樣是固定的線性的。而是可以從一個位置跳到另外的位置。可以從中獲取更多的資訊。可以轉到別的主題上。想要了解某一個主題的內容只

一個前端分離的架構例項

最近在為新系統的架構進行選型,覺得前後分離是個選擇的方向,當然也還有很多待解決問題。這篇很有幫助,原文如下: 看了《系統架構:Web應用架構的新趨勢---前端和後端分離的一點想法》 這篇文章,對前端與後端的分離非常認同,這樣做對於系統的維護是有相當大的好處的。正好自己也設

利用jquery ajax前端的檔案傳輸

首先了解下$ ajax裡面的各個屬性1.url: 要求為String型別的引數,(預設為當前頁地址)傳送請求的地址。2.type: 要求為String型別的引數,請求方式(post或get)預設為get。3.timeout: 要求為Number型別的引數,設定請求超時時間(毫

sign in with apple(java)

  最近新開發的ios平臺的app在提審的時候,被拒了,原因是app上如果有接第三方登陸(比如,微信,微博,facebook等),那就必須要接apple id登陸,坑爹~蘋果霸權啊!然而沒辦法,靠他吃飯,他是爸爸,唯有順從。下面我來說一下對接蘋果登陸的後端驗證模組,目前這一塊網上資料比較少,而且說得不夠完整。

前後分離權限

重定向 code 請求 負責 功能 用戶 直接 ace 認證 我在寫web項目時,總是會為權限認證犯愁。在采用前後端分離後,後端只提供接口,項目的路由不再歸後端管,而是由代理服務器(Nginx)控制。對於一般公開資源,URL的路由並不依賴於用戶的狀態,因此光靠代理服務器控制

Spring MVC之中前端傳數據

變化 性別 debug lan 直接 oot try 方向 表單 Spring MVC之中前端向後端傳數據 Spring MVC之中前端向後端傳數據和後端向前端傳數據是數據流動的兩個方向, 在此先介紹前端向後端傳數據的情況. 一般而言, 前端向後端傳數據的場景, 大多是出

淺析前端渲染渲染

前端渲染與後端渲染本質上可以理解為:瀏覽器渲染與伺服器渲染   備註:以下純屬本人個人的一些總結與看法,如有異同,歡迎大家指教; 渲染的本質:字串的拼接,將資料渲染進固定格式的html程式碼中,形成最終的html顯示在使用者頁面上。 對比:    

作為一個前端應該如何高效的協作開發

前言 人們總是不斷地在為提高工作效率不斷的努力,發明新的東西,開創新的方式,目的是為了讓生活越來越簡單,越來越美好。所以隨著技術的發展,前後端分離越來越明確,以至於職位分化也越來越明確。 1. 前後端分離 前端與後端的分離,能使前端的開發脫離後端的開發模式,擁有更大的自由度,以此便可做前