• JavaScript Ajax技术


    1、Ajax需求,例子。
       -----------------------ViewVideo.ashx
       contex.Response.ContentType="text/html";
       string strIsPostBack=context.Request["IsPostBack"];
       bool isPostBack=Convert.ToBoolean(context.Request["IsPostBack"]);
       if(string.IsNullOrEmpty(strIsPostBack))
       {
         ispostBack=false;
        }     
        else
       {
         isPostBack=Convert.ToBoolean(strIsPostBack);
        }
        
        if(isPostBack)//如果是返回来的页面,则要统计
        {//投票
           string zan=context.Request["Zan"];
           if(string.IsNullOrEmpty(zan))
           {
               SqlHelper.ExecuteNonQuery("Update T_ZanCai set CaiCount=CaiCount+1");
               context.Response.Redirect("ViewVideo.ashx");
            }
            else
            {
               SqlHelper.ExecuteNonQuery("Update  T_ZanCai set ZanCount=ZanCount+1");
               context.Response.Redirect("ViewVideo.ashx");
            }
        }
        else//如果只是进入这个页面,直接读出来。
        {
           int zanCount=(int)SqlHelper.ExecuteScalar("select top 1 ZanCount from T_ZanCai");
           int caiCount=(int)SqlHelper.ExecuteScalar("select top 1 CaiCount from T_ZanCai");
           var data=new {ZanCount=zanCount,CaiCount=caiCount};
           string html=CommonHelper.RenderHtml("ViewVideo.htm",data);
           context.Response.Write(html);
        }
    
       -----------------------ViewVideo.htm
       <body>
             <video src="diaosi.mp4" autoplay controls></video>//设置自动播放,html5里面的 
             <form action="ViewVideo.ashx" method="post">
             <input type="hidden" name="IsPostBack" value="true"/>//设置隐藏字段,判断赞和踩
             <p><input type="submit" name="Zan" value=""/>$Model.ZanCount</p>
             <p><input type="submit" name="Cai" value=""/>$Model.CaiCount</p>
             </form>
       </body>
       ----------------------Test1.mdf
       ZanCount int 允许为空
       CaiCount int 允许为空
       //这样就实现了赞和踩,但是。每点一次都要刷新重新进入视频。要实现Ajax刷新。
    
    2、在HTML中使用JavaScript创建,XMLHTTPRequest对象来向服务器发出请求以及获得返回的数据。就像
    
    JavaScript版的WebClient一样,在页面中由XMLHTTPRequest来发出,Http的请求和获得服务器的返回数据,
    
    这样页面就不会刷新了。XMLHTTPRequest是AJAX的核心对象。
    
    3、XMLHTTPRequest对象的用法。
       ------------------------------------------------------ViewVideo2.htm重新弄个页面
       <head>
       <script type="text/javascript">
         function zan()
         {
          var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject
    
    ('Microsoft.XMLHTTP'); //创建XMLHTTP对象,考虑兼容性。XHR,不同浏览器创建xmlhttprequest不一样,
    
    这种方法是兼容好多浏览器的创建。
          xmlhttp.open("POST", "ZanCai.ashx?action=Zan", true); 
          //“准备”向服务器的GetDate1.ashx发出Post请求(GET可能会有缓存问题)。这里还没有发出请求
          //DRY:不要复制粘贴代码 要尽量封装成js库。
          //AJAX是异步的,并不是等到服务器端返回才继续执行
          xmlhttp.onreadystatechange = function (){
              if (xmlhttp.readyState == 4) 
             //readyState == 4 表示服务器返回完成数据了。之前可能会经历2(请求已发送,正在处理中)
    3(响应中已有部分数据可用了,但是服务器还没有完成响应的生成)
              {
                if (xmlhttp.status == 200) //如果Http状态码为200则是成功
                {
                  //alert(xmlhttp.responseText);
                 document.getElementById("ZanCount").innerHTML = xmlhttp.responseText;   
                 //只有返回成功了,并且200才进行处理。                        //responseText为服务
    
    器端返回的报文正文
                 }
                 else
                 {    
                   alert("AJAX服务器返回错误!");
                  }
               }
          }
          //不要以为if (xmlhttp.readyState == 4) {在send之前执行!!!!
          xmlhttp.send(); 
          //这时才开始发送请求。并不等于服务器端返回。请求发出去了,我不等!去监听      
    
    onreadystatechange吧!
          }  
       </script>
       </head>
       <body>
         <video src="diaosi.mp4" autoplay controls></video>//设置自动播放,html5里面的 
          <p>
           <input type="submit" name="Zan" value="" onclick="zan()"/>//加入一个onclick
           <label id="ZanCount"></label>
          </p>
          <p>
           <input type="submit" name="Cai" value=""/>
             <label id="CaiCount">
            </lable>
          </p>
       </body>
       ---------------------------------------------ZanCai.ashx
       string action=context.Request["action"];
       if(action=="Zan")
       {
          SqlHelper.ExecuteNonQuery("Update  T_ZanCai set ZanCount=ZanCount+1");//加1
          int zanCount=(int)SqlHelper.ExecuteScalar("select top 1 ZanCount from T_ZanCai");//取最新
          context.Response.Write(zanCount);  
        }
        else
        {
          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);
        }
    
    4、封装Ajax请求。不用写那么一堆。可以封装Ajax库。
       添加文件夹,建立JS文件。
       ------------------------------------------ajax.js
       function ajax(data,onsuccess){
        //onsuccess是指向function的变量,类似于C#委托,data是指向一个字符串
    
        function ajax(url,onsuccess){//先假定onsuceess就只有一个参数,就是一个返回的报文。
         var xmlhttp = window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject
    
    ('Microsoft.XMLHTTP'); 
          xmlhttp.open("POST", "url", true); 
          xmlhttp.onreadystatechange = function (){
              if (xmlhttp.readyState == 4) 
              {
                if (xmlhttp.status == 200)
                {
                   //onsuccess();//处理成功后的逻辑是变的。
                   //document.getElementById("ZanCount").innerHTML = xmlhttp.responseText;
                    onsuccess(xmlhttp.responseText);
                  //假定onsuceess就只有一个参数,就是一个返回的报文。则可以这样写,直接把报文传过去
    
    。
                 }
                 else
                 {    
                   alert("AJAX服务器返回错误!");
                  }
               }
          }
          xmlhttp.send(); 
          }    
       }
    
    5、做Cai的Ajax-----------------------------------ViewVideo2.htm
       <script type="text/javascript" src="js/ajax.js">//路径为什么不../js/ajax.js
       </script>
        function cai()
        {
          ajax("ZanCai.ashx?action=Cai",function(resText){
           document.getElementById("CaiCount").innerHTML=resText;});//为什么不../ZanCai.ashx?
         }
         ----------------------<input type="button" name="Cai" value="" onclick="cai()">
    
    6、5中的路径问题,为什么不同的文件夹,调用的时候没有..呢?
       <video src="diaosi.mp4" autoplay controls></video>//给我我这个文件夹下的diaosi.mp4
  • 相关阅读:
    根据CPU核数合理设置线程池大小
    jvm类加载的过程
    springboot2.x整合redis实现缓存(附github链接)
    记录一次坎坷的debug之旅,NUXT框架页面多开假死现象,NUXT刚开始可以访问,突然就访问无响应,并且前后端均未出现任何报错提示:现在是早晨4点35分
    hibernate用Query.setFirstResult和Query.setMaxResults分页时,传入的manresults不能为0,否则解析后的sql会去查全表数据
    工作时发现oracle的分页查询的数据会重复,进行分析并给出解决方式
    看别人的代码是进步最快的方式
    关于电磁炉使用时造成的电磁场导致洗衣机等电器失效的情况总结
    关于在项目中创建一个新的线程之后需要将线程持有的数据库连接对象归还的思考
    Oracle分页和mysql分页的区别
  • 原文地址:https://www.cnblogs.com/d685600/p/3662998.html
Copyright © 2020-2023  润新知