当前位置: 首页 > news >正文

ajax测试Demo以及json简单的转化

Ajax是局部刷新,并不影响页面其他的操作

实例1:本测试是演示利用Ajax在一个页面播放视频,点击赞和踩按钮,视频不会受影响,

新建一个ajaxTest.html页面

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript" src="js/ajax.js"></script>
    <script type="text/javascript">
        function zan()
        {
            var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');//创建xmlhttp对象,考虑兼容性
            xmlhttp.open("POST", "AjaxTest.ashx?action=Zan", true);//准备向服务器发出post请求
            xmlhttp.onreadystatechange = function ()
            {
                if (xmlhttp.readyState == 4)    //readyState==4表示服务器返回数据了额,之前可能经历  2(请求已发生,正在处理中)3表示(响应中有部分数据可以用,拂去其还没有完成响应的生成)
                {
                    if (xmlhttp.status == 200)  //状态码200位成功
                    {
                        document.getElementById("ZanCount").innerHTML = xmlhttp.responseText;//responseText是服务器返回的报文正文
                    }
                    else {
                        alert("ajax服务器返回错误");
                    }
                }
            }
            xmlhttp.send();//这时才发送请求,发送完请求,并一定马上服务器响应,然后看上面的onreadystatechange状态,发送完继续执行下面的操作,不等服务器
        }

        function cai()
        {
            ajax("AjaxTest.ashx?action=Cai", function (reText) {
                document.getElementById("CaiCount").innerHTML = reText;
            })
        }
        </script>
</head>
<body>
    <video src="video.mp4" controls="controls"></video>
        <p><input type="button" name="Zan" value="" οnclick="zan()"/><label id="ZanCount"></label></p>
        <p><input type="button" name="Cai" value=""οnclick="cai()"/><label id="CaiCount"></label></p>
</body>
</html>

 

然后新建一个后台处理程序AjaxTest.ashx

string action = context.Request["action"];
if (action == "Zan") //赞加1
{
SqlHelper.ExecuteNonQuery("Update T_ZanCai set ZanCount=ZanCount+1");
int zanCount = (int)SqlHelper.ExecuteScalar("select top 1 ZanCount from T_ZanCai");
context.Response.Write(zanCount);
}
else//踩加1
{
SqlHelper.ExecuteNonQuery("Update T_ZanCai set CaiCount=CaiCount+1");
int caiCount = (int)SqlHelper.ExecuteScalar("select top 1 CaiCount from T_ZanCai");
context.Response.Write(caiCount);
}

  数据库test,新建表T_ZanCai

上面的ajax都有很多相似的部分,可以吧ajax封装起来

新建js文件夹,下新建ajax.js

function ajax(url, onsuccess)
{
    var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject('Microsoft.XMLHTTP');//创建xmlhttp对象,考虑兼容性

    xmlhttp.open("POST", url, true);//准备向服务器发出post请求
    xmlhttp.onreadystatechange = function () {
        if (xmlhttp.readyState == 4)    //readyState==4表示服务器返回数据了额,之前可能经历  2(请求已发生,正在处理中)3表示(响应中有部分数据可以用,拂去其还没有完成响应的生成)
        {
            if (xmlhttp.status == 200)  //状态码200位成功
            {
                //responseText是服务器返回的报文正文
                onsuccess(xmlhttp.responseText);
            }
            else {
                alert("ajax服务器返回错误");
            }
        }
    }
    xmlhttp.send();//这时才发送请求,发送完请求,并一定马上服务器响应,然后看上面的onreadystatechange状态,发送完继续执行下面的操作,不等服务器
}

 

实例2:简单的用户注册页面,ajax检测用户名是否已被注册,没有注册功能,只是检测用户名是否合法

注册页面Register.html

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title>用户注册用户名ajax检测是否已用</title>
    <script type="text/javascript" src="js/ajax.js"></script>
    <script type="text/javascript">
        function checkUserName()
        {
            var userName = document.getElementById("UserName").value;
            ajax("checkuserName.ashx?UserName=" + userName, function (resText) {
                if (resText == "ok")
                {
                    document.getElementById("UserNameMsg").innerHTML="用户名可用";
                }
                else if(resText == "error")
                {
                    document.getElementById("UserNameMsg").innerHTML = "用户名不可用";
                }
                else if (resText == "forbidden")
                {
                    document.getElementById("UserNameMsg").innerHTML = "用户名含有禁词,请换用其他用户名";
                }
            });
        }

    </script>
</head>
<body>
    <form action="Register.ashx">   
        用户名:<input type="text" id="UserName" name="UserName" οnblur="checkUserName()"/><span id="UserNameMsg" style="color:red"></span><br>
        密码:<input type="password"/>
    </form>

</body>
</html>

ajax 后台处理checkUserName.ashx

 string userName=context.Request["UserName"];            
            if(userName.Contains("国家") || userName.Contains("管理员"))
            {
                context.Response.Write("forbidden");
            }
            int count = (int)SqlHelper.ExecuteScalar("select count(*) from tab_user where name=@UserName", new SqlParameter("@UserName", userName));
            if (count <= 0)
            {
                context.Response.Write("ok");
            }
            else
            {
                context.Response.Write("error");
            }

 

实例三:Json的使用:

C# 将.net对象转为json字符串,然后在前台页面js解析json为javascript对象使用

新建Person.cs类

 public class Person
    {
        public string Name { get; set; }
        public int Age { get; set; }
        public string Email { get; set; }
    }

 

jsonTest.ashx代码:

 List<Person> list =new List<Person>();
            list.Add(new Person { Name="hyb",Age=11,Email="111@q.com"});
            list.Add(new Person { Name = "aa", Age = 11, Email = "221@q.com" });
            list.Add(new Person { Name = "bb", Age = 11, Email = "23331@q.com" });
            //将对象序列号为json字符串的方法
            JavaScriptSerializer jss=new JavaScriptSerializer();
            string json=jss.Serialize(list);
            //string json = jss.Serialize(new Person { Name="哈哈",Age=23,Email="12345@qq.com"});

            context.Response.Write(json);

jsonTest.html前台代码:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title></title>
    <script type="text/javascript" src="js/ajax.js"></script>
    <script src="js/json2.js"></script>
    <script type="text/javascript" >
        function go()
        {
            ajax("jsonTest.ashx", function (resText) {
                //把json字符串转为javascrip对象
                var person = JSON.parse(resText);
                for (var i = 0; i < person.length; i++)
                {
                    var p=person[i];
                    alert("姓名:"+p.Name+"年龄:"+p.Age+"邮箱:"+p.Email);
                }
            });
        }

    </script>
</head>
<body οnlοad="go()">
</body>
</html>

 

注意:一般浏览器支持JSON.parse,不支持的引用json2,js就可以了

 

转载于:https://www.cnblogs.com/DonAndy/p/5986001.html

相关文章:

  • 《深入理解JavaScript》—— JSON
  • VCS仿真 Dump Memory
  • 【读书笔记】《编程珠玑》第二章之算法设计的重要性
  • Web:AJAX的网络请求
  • Lambda表达式详解(转载)
  • JMeter 配置元件之计数器Counter
  • signalr-源码
  • iOS开发之内购-AppStore
  • matplotlib —— 添加文本信息(text)
  • linux下压缩包的解压
  • [Java][Liferay] File system in liferay
  • 用for、while、do-while循环输出10句“好好学习,天天向上!”
  • 常见标签的全称
  • 【EntityFramework Core】实体实例化注入
  • apiCloud中的API对象
  • ES6指北【2】—— 箭头函数
  • Git 使用集
  • go语言学习初探(一)
  • Laravel核心解读--Facades
  • Spring Cloud Alibaba迁移指南(一):一行代码从 Hystrix 迁移到 Sentinel
  • storm drpc实例
  • Sublime text 3 3103 注册码
  • webpack4 一点通
  • 大型网站性能监测、分析与优化常见问题QA
  • 基于HAProxy的高性能缓存服务器nuster
  • ------- 计算机网络基础
  • 警报:线上事故之CountDownLatch的威力
  • 力扣(LeetCode)22
  • 实战|智能家居行业移动应用性能分析
  • 微信小程序实战练习(仿五洲到家微信版)
  • 移动端高清、多屏适配方案
  • #我与Java虚拟机的故事#连载18:JAVA成长之路
  • $HTTP_POST_VARS['']和$_POST['']的区别
  • (6)添加vue-cookie
  • (Oracle)SQL优化技巧(一):分页查询
  • (附源码)计算机毕业设计高校学生选课系统
  • (已更新)关于Visual Studio 2019安装时VS installer无法下载文件,进度条为0,显示网络有问题的解决办法
  • (转载)虚幻引擎3--【UnrealScript教程】章节一:20.location和rotation
  • ***通过什么方式***网吧
  • .bat批处理(七):PC端从手机内复制文件到本地
  • .NET Core IdentityServer4实战-开篇介绍与规划
  • .NET 同步与异步 之 原子操作和自旋锁(Interlocked、SpinLock)(九)
  • .NET 中的轻量级线程安全
  • .net 重复调用webservice_Java RMI 远程调用详解,优劣势说明
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET简谈设计模式之(单件模式)
  • .net快速开发框架源码分享
  • .xml 下拉列表_RecyclerView嵌套recyclerview实现二级下拉列表,包含自定义IOS对话框...
  • :“Failed to access IIS metabase”解决方法
  • [2]十道算法题【Java实现】
  • [20180224]expdp query 写法问题.txt
  • [AS3]URLLoader+URLRequest+JPGEncoder实现BitmapData图片数据保存
  • [BZOJ5250][九省联考2018]秘密袭击(DP)
  • [CodeForces-759D]Bacterial Melee
  • [Flutter] extends、implements、mixin和 abstract、extension的使用介绍说明