博客
关于我
第六章 Json和AJAX
阅读量:337 次
发布时间:2019-03-04

本文共 15126 字,大约阅读时间需要 50 分钟。

文章目录


提示:以下是本篇文章正文内容,下面案例可供参考
目标

1、JSON对象【重点】

2、Ajax【难点】

3、正则表达式【重点】

4、Url重写【了解】

知识点讲解

一、JSON

1、why:

轻量级传递数据,便于人和机器阅读

2、what:

JavaScript object notation,轻量级数据交换格式,是JavaScript的一个子集

注:1、json完全独立于语言(json格式的数据可以在任何的语言c#、Java、Python等使用)

3、组成:键值对

4、how:

(一)定义json格式的数据(存储数据)

简单:值是基本类型字符串、数字、布尔

 <script> //var jsonobj= {key1:value1,key2:value2,key3:value3}var jsonobj = {    name: "猪八戒", age: 18, money: 9.9, married: false };//键值对  属性值</script>

注:(1)键是字符串,如果键包含“-” ,必须用“”括起来
(2)值的类型:字符串“”、数字、布尔true|false、对象、数组、函数function、null

复杂:值是对象类型、数组类型、函数类型

(1)属性值是对象类型 ,用{}

//var jsonobj={ key1:value1,key2:object  }var jsonobj2 = {     name: "猪八戒", age: 18, money: 9.9, married: false,  wife: {    name: "潘金莲", age: 18 } }

(2)属性值是数组,用[]

var jsonobj2 = {     name: "猪八戒", age: 18, money: 9.9, married: false, wife: {    name: "潘金莲", age: 18 }, sons: [{    name: "猪大", age: 2 }, {   name: "猪二",age:1}]};

(3)属性值是函数,用function(){}

var jsonobj2 = {    name: "猪八戒", age: 18, money: 9.9, married: false,   wife: {    name: "潘金莲", age: 18 },   sons: [{    name: "猪大", age: 2 }, {    name: "猪二", age: 1 }],   say: function () {         alert("大师兄,师傅被妖怪抓走了")   }};

(二)取数据

语法:json对象.属性名 或者 json对象[“属性名”]

注:什么时候必须用"[]"取值,当属性名称有“-”连接符时

简单:

语法:json对象.键名 或json对象[“键名”]

//取猪八戒的名字和年龄var n = jsonobj .name;var a = jsonobj .age;

复杂:

值是对象: jsonobj.key1.key2.属性名 或者 jsonobj[“key1”][“key2”].属性名

// 取猪八戒媳妇的名字var v2 = jsonobj2.wife.name;

值是数组: jsonobj.key[0]

//数组  取猪八戒第一个儿子的名字 var v3 = jsonobj3.sons[0].name

值是函数: jsonobj.key

//函数  聆听猪八戒唠叨var s = jsonobj4.say;s();

(三)c#后台输出json格式的字符串

using System.Web.Script.Serialization;//引入JavaScript序列号包public void ProcessRequest(HttpContext context)//处理用户的请求 {        //设置输出的内容的类型   context.Response.ContentType = "text/plain";   //重点输出json格式的信息//   //这是c#后台程序    var stu = new {    name = "王勤", age = 18, married = false };   //将c#对象转换为JavaScript里面的json格式的字符串     //创建一个JavaScript序列化对象   JavaScriptSerializer jss = new JavaScriptSerializer();   //转换为json格式的字符串"{ name: "王勤", age: 18, married: false }"   string jsonstr = jss.Serialize(stu);    //输出给浏览器    context.Response.Write(jsonstr); }

二、 Ajax

1、what:

Asynchronous Javascript And XML 用于与服务器进行数据交互:获取或提交数据。

2、why:

局部刷新 (不需要刷新整个页面,就能从服务获取数据并更新到界面)

3、how:

原生ajax、第三方ajax框架

原生

 var  xmlHttpRequest = new XMLHttpRequest()

第三方框架:兼容型好、使用便捷,jQuery的ajax函数

jQuery通用语法:(常用)

 $.ajax( {   	 url: "请求的网页地址",	 type: "请求方式get|post,默认get,上传大的数据post",	 dataType: "要求服务器返回的数据类型json|html|xml|script,常返回json数据",	 data:{    username: "纪好靓",age: 18},//用于传递到服务器的数据	 success:function(result,status){   //请求成功事件。result由服务器返回的结果,并根据dataType参数进行处理后的数据;状态字符串		 alert(result);	 }, 	 error:function (xhr,status,error) {   //请求失败事件 三个参数:XMLHttpRequest 象、错误信息、可选)捕获的异常对象		 alert(status);	 }         } ); 

(一)取数据:异步从服务器获取json数据

$.ajax({         url: "请求的网页地址",      dataType: "json",       success:function(result,status){   //请求成功事件。               $("#面板id").html(result);        },         error:function (xhr,status,error) {   //请求失败事件            alert(status);        }          });  

(二)取数据:异步从服务器获取HTML或XML

$.ajax({        url: "请求的网页地址",     dataType: "html",     success:function(result,status){   //请求成功事件。          $("#面板id").html(result);      },       error:function (xhr,status,error) {   //请求失败事件           alert(status);      }         });  

(三)提交数据

//第一步:客户端异步请求服务器网页提交数据  $.ajax({       url: "请求的网页地址",    dataType: "json",   //data:{参数名:参数值},//需要提交的json数据    data:$("#表单id").serialize(),//需要提交的表单数据    success:function(result,status){   //请求成功事件。       console.log(result);    },     error:function (xhr,status,error) {   //请求失败事件         alert(status);    }         }); 
//第二步:服务端接收数据 String v=Request["表单名称"]; //或者 String v=context.Request["表单名称"]; 

例题:获取数据(新建HTML页)

前端

<!--前端--><!DOCTYPE html><html><head>    <meta charset="utf-8" />    <title></title>    <!-- 新 Bootstrap4 核心 CSS 文件 -->    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">    <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->    <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>    <!-- bootstrap.bundle.min.js 用于弹窗、提示、下拉菜单,包含了 popper.min.js -->    <script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>    <!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->    <script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script></head><body>    <table class="table table-bordered">        <thead>            <tr>                <th>产品价格</th>                <th>价格</th>                <th>Email</th>            </tr>        </thead>        <tbody></tbody>    </table>    <script>        $.ajax({                url: "/ProductListJson",            type: "get",            dataType: "json",            success: function (ret, status) {    //请求成功事件。result由服务器返回的结果,并根据dataType参数进行处理后的数据;状态字符串                            for (var i in ret) {                        //行                    var row = ret[i]                    //构建一个元素 行 节点                    var $row = $(`<tr><td>${      row.pname}</td><td>${      row.price}</td><td>john@example.com</td></tr>`)                    //将行添加到文档树                    $(".table tbody").append($row);                }            }        });     </script></body></html>

后端

   public class ProductListJson : IHttpHandler    {           public bool IsReusable => false;        public void ProcessRequest(HttpContext context)        {               //设置输出的内容的类型            context.Response.ContentType = "text/plain";            //查询            meixinEntities db=new meixinEntities();            List<m_product> obj = db.m_product.ToList();            //将c#对象转换为JavaScript里面的json格式的字符串             //创建一个JavaScript序列化对象            JavaScriptSerializer jss = new JavaScriptSerializer();            //转换为json格式的字符串            string jsonstr = jss.Serialize(obj);            //输出给浏览器            context.Response.Write(jsonstr);        }    }

创建处理程序==》》Web.config添加处理程序命令(ProductListJson )

例题:添加

前端

<!--前端--><!DOCTYPE html><html><head>    <meta charset="utf-8" />    <title></title>    <!-- 新 Bootstrap4 核心 CSS 文件 -->    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">    <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->    <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>    <!-- bootstrap.bundle.min.js 用于弹窗、提示、下拉菜单,包含了 popper.min.js -->    <script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>    <!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->    <script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script></head><body>    <form id="theForm">        <div class="form-group">            <label for="email">名称:</label>            <input type="text" class="form-control" name="name">        </div>        <div class="form-group">            <label for="pwd">价格:</label>            <input type="text" class="form-control" name="price">        </div>        <button type="submit" class="btn btn-primary" id="btn">提交</button>    </form>    <a href="default.html">列表</a>    <script>        $(function () {                //按钮单击,提交数据            $("#btn").on("click", function () {                    $.ajax({                        url: "/ProductAddJson",                    type:"get",                    dataType: "json",                    //data:{参数名:参数值},//需要提交的json数据                    data: $("#theForm").serialize(),//需要提交的表单数据  “”表单ID                    success: function (result, status) {    //请求成功事件。                        alert(result.msg)                    }                })                return false            })        })    </script></body></html>

后端

   public class ProductAddJson: IHttpHandler    {           public bool IsReusable => false;        /// <summary>        /// 公开的接口:name 名称   price价格        /// </summary>        /// <param name="context"></param>        public void ProcessRequest(HttpContext context)        {               context.Response.ContentType = "text/plain";            //接受客户端传递过来参数数据            string n = context.Request["name"];            string p = context.Request["price"];            //保存到数据库            meixinEntities db = new meixinEntities();            m_product obj = new m_product();//创建实体对象            obj.pname = n;            obj.price = Convert.ToDouble(p);            db.m_product.Add(obj);//添加到实体对象集合            db.SaveChanges();//同步到物理数据库            //返回给客户端结结果            var ret = new {    status = true, msg = "添加成功" };            //转换为json格式的字符串            //转换为jsog格式的字符串数据            JavaScriptSerializer jss = new JavaScriptSerializer();            context.Response.Write(jss.Serialize(ret));//调用方法将ret转换为json格式的字符串        }    }

创建处理程序==》》Web.config添加处理程序命令(ProductAddJson)

例题:删除

前端

<!--前端--><!DOCTYPE html><html><head>    <meta charset="utf-8" />    <title></title>    <!-- 新 Bootstrap4 核心 CSS 文件 -->    <link rel="stylesheet" href="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/css/bootstrap.min.css">    <!-- jQuery文件。务必在bootstrap.min.js 之前引入 -->    <script src="https://cdn.staticfile.org/jquery/3.2.1/jquery.min.js"></script>    <!-- bootstrap.bundle.min.js 用于弹窗、提示、下拉菜单,包含了 popper.min.js -->    <script src="https://cdn.staticfile.org/popper.js/1.15.0/umd/popper.min.js"></script>    <!-- 最新的 Bootstrap4 核心 JavaScript 文件 -->    <script src="https://cdn.staticfile.org/twitter-bootstrap/4.3.1/js/bootstrap.min.js"></script></head><body>    <table class="table table-bordered">        <thead>            <tr>                <th>产品价格</th>                <th>价格</th>                <th>口味</th>                <th>操作</th>            </tr>        </thead>        <tbody></tbody>    </table>    <button id="btn">异步加载</button>    <a href="Add.html">添加</a>    <script>        //删除函数        function del(id) {                $.ajax({                    url: "/ProductDeleteJson?id=" + id,                type: "get",                dataType: "json",                success: function (ret, status) {    //请求成功事件。result由服务器返回的结果,并根据dataType参数进行处理后的数据;状态字符串                    if (ret.status) {                            alert(ret.msg)                        //刷新==》清空table                        $(".table tbody").html("")                        $.ajax({                                url: "/ProductListJson",                            type: "get",                            dataType: "json",                            success: function (ret, status) {    //请求成功事件。result由服务器返回的结果,并根据dataType参数进行处理后的数据;状态字符串                                for (var i in ret) {                                        var row = ret[i]                                    //构建一个元素 行 节点                                    var $row = $(`<tr><td>${      row.pname}</td><td>${      row.price}</td><td>${      row.category}</td><td onClick="del(${      row.id})">删除</td></tr>`)                                    //将行添加到文档树                                    $(".table tbody").append($row);                                }                            }                        })                    }                }            })        }        $(function () {                //按钮单击,显示数据            $("#btn").on("click", function () {                    $.ajax({                        url: "/ProductListJson",                    type: "get",                    dataType: "json",                    success: function (ret, status) {    //请求成功事件。result由服务器返回的结果,并根据dataType参数进行处理后的数据;状态字符串                        for (var i in ret) {                                var row = ret[i]                            //构建一个元素 行 节点                            var $row = $(`<tr><td>${      row.pname}</td><td>${      row.price}</td><td>${      row.category}</td><td onClick="del(${      row.id})">删除</td></tr>`)                            //将行添加到文档树                            $(".table tbody").append($row);                        }                    }                })            })        })    </script></body></html>

后端

   public class ProductDeleteJson : IHttpHandler    {           public bool IsReusable => false;        /// <summary>        /// 公开的接口:name 名称   price价格        /// </summary>        /// <param name="context"></param>        public void ProcessRequest(HttpContext context)        {               context.Response.ContentType = "text/plain";            //接受客户端传递过来参数数据            string id = context.Request["id"];            //创建数据库对象            meixinEntities db = new meixinEntities();            m_product o = db.m_product.Find(Convert.ToInt32(id));            db.m_product.Remove(o);//将0从实体对象集合移除            db.SaveChanges();//同步到物理数据库            //返回给客户端结结果            var ret = new {    status = true, msg = "删除成功" };            //转换为json格式的字符串            //转换为jsog格式的字符串数据            JavaScriptSerializer jss = new JavaScriptSerializer();            context.Response.Write(jss.Serialize(ret));//调用方法将ret转换为json格式的字符串        }    }

创建处理程序==》》Web.config添加处理程序命令(ProductDeleteJson)

三、正则表达式 规则

1、what:

regular expression ,描述了一种字符串匹配的模式(模板、模样 )(pattern) =》模糊查询

2、why:

可以用来检查一个字符串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等 (匹配包含、替换子字符串)

3、how:

由普通字符(abc)和特殊字符(元字符)组成字符模板

//a、引入命名空间using System.Text.RegularExpressionsstring zbj = "猪八戒提着200斤米高老庄提亲,被赶出来了";  //b、创建正则表达式对象 //Regex reg = new Regex(@"正则表达式"); Regex reg = new Regex(@"(\d{3})斤米");//c、调用Regex对象的匹配方法 reg.Match(path);Match match = reg.Match(path);//d、判断是是否匹配成功 if(match.Success){      Response.Write("猪八戒提亲成功。");  }//e、获取匹配项的子字符串match.Groups[1].Value if(match.Success){      Response.Write("猪八戒提亲成功。彩礼"+match.Groups[0].Value);  }

四、URL重写

what:

将网页真实的URL隐藏起来,使用户通过相应的虚拟URL访问网页资源以弥补真实URL的不足。常用于页面静态化技术,静态化技术:

a、伪静态(url重写) b、真静态 c、折中法

why:

a、满足搜索引擎需要,实现 搜索引擎中的排名优化 (SEO) =》将网页收录在搜索引擎数据库
b、隐藏网页实现技术,增强网站安全
c、提高网站的可用性和专业性 便于记网址

how:

1、urlMappings:url映射,不灵活,配置的地址是固定的,不支持通配符和正则表达式

2、正则表达式(通过过滤器)

 using System.Text.RegularExpressions;//引入 private void Context_BeginRequest(object sender, EventArgs e){   HttpApplication contenx = sender as HttpApplication; //1获取网页访问路径  string path = contenx.Request.Path;//  /fff_4774_4664.html //2 创建一个正则表达式对象 匹配 访问路径path  如果是&ldquo;字母_数字_数字.html&rdquo;的格式  Regex reg = new Regex(@"\w+_(\d+)_(\d+)\.html");//3 调用reg的匹配方法 拿着 模板去与字符串 pathMatch match = reg.Match(path);  if (match.Success) {        //重定向 跳转到真实的页面     //contenx.Response.Redirect("/money.aspx");     //转发  转发后的地址不在浏览器显示出来     contenx.Server.Transfer("/money.aspx?id="+match.Groups[1]+"&price="+ match.Groups[2]);  }}

3、使用URLRewriter 第三方插件

a、引入第三方类库

b、在web.config文件中配置访问规则

<!--a、在<configuration>节点下,添加如下节点--><configSections>    <section name="RewriterConfig"  type="URLRewriter.Config.RewriterConfigSerializerSectionHandler,URLRewriter"/></configSections> <!--b、在<configuration>节点下,添加如下节点--><system.webServer>    <handlers>          <add verb="*" path="*.html" type="URLRewriter.RewriterFactoryHandler,   URLRewriter" name="urlrewriter"/>    </handlers></system.webServer><!--c、在<configuration>节点下,添加URL重写规则 --><RewriterConfig>  <Rules>       <RewriterRule>               <LookFor>~/goods_(\d)+\.html</LookFor>         <SendTo>~/goodsList.aspx?id=$1</SendTo>      </RewriterRule>     </Rules></RewriterConfig>

转载地址:http://ofie.baihongyu.com/

你可能感兴趣的文章
02、MySQL—数据库基本操作
查看>>
Redis数据类型
查看>>
1668: [Usaco2006 Oct]Cow Pie Treasures 馅饼里的财富
查看>>
OpenJDK1.8.0 源码解析————HashMap的实现(一)
查看>>
MySQL-时区导致的时间前后端不一致
查看>>
2021-04-05阅读小笔记:局部性原理
查看>>
go语言简单介绍,增强了解
查看>>
2.1 Kubernetes--Pod
查看>>
python file文件操作--内置对象open
查看>>
Error connecting to undo manager of souce file
查看>>
ERP/MIS开发 LLBL Gen多表操作
查看>>
架构师入门:搭建基本的Eureka架构(从项目里抽取)
查看>>
Java核心技术及面试指南 流程控制方面的面试题答案
查看>>
MongoDB 快速扫盲贴
查看>>
修复搜狗、360等浏览器不识别SameSite=None 引起的单点登录故障
查看>>
2017/08/21 工作日志
查看>>
EXTJS4.2——10.Tab+Iframe
查看>>
WEB基础——AJAX
查看>>
one + two = 3
查看>>
Kali Day01 --- arpspoof命令进行断网攻击(ARP欺骗)
查看>>