AJAX调用方式总结

最近用了近两天的时间对AJAX的知识进行了一个梳理,觉得是时候对AJAX的相关知识点做个总结了.....这当然也就是本篇博客的主旨了....我也不是很赞成用长篇大论来讲述什么是AJAX,怎么使用AJAX,这样我总觉得太理论化了,接受起来会有一定的难度...所以,本篇博客的另一个主旨是:从实例入手,由浅到深.....好了,直接开始入手吧

专注于为中小企业提供成都网站制作、成都网站设计服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业信州免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了超过千家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

实例一:省份-城市的联级下拉框 

利用AJAX来获取数据实现联级下拉框,当省份下拉框的选项发生变化时,城市的选项对应变化,效果如图:

我们首先来实现后台,先将数据准备好了在实现前台获取数据,【考虑:当我们页面登录的时候,我们需要获取的数据】: 1).省份框中的省份; 2).因为登录时省份框的第一项选中,所以还需要第一个省份所对应的城市名,好了,需求知道了,代码就好写了,直接贴上后台代码:

 
 
 
 
  1. protected void Page_Load(object sender, EventArgs e)
  2.         {
  3.             if (Request.QueryString["provid"] != null)
  4.             {
  5.                 //首先获取传递过来的参数值
  6.                 string provId = Request.QueryString["provid"].ToString();
  7.                 //查询所有城市
  8.                 string sqlprov = "select * from Provice";
  9.                 SqlDataReader reader = DbHelperSQL.ExecuteReader(sqlprov);
  10.                 string resultProv = "";
  11.                 while (reader.Read())
  12.                 {
  13.                     string id = reader[0].ToString();
  14.                     string provName = reader[1].ToString();
  15.                     //字符串拼接,为了前台获取时可以切分获取对应数据,用 '|' 来隔离 各个省份
  16.                     resultProv += "|" + string.Format("{0},{1}", id, provName);
  17.                 }
  18.                 reader.Close();
  19.                 //根据省份框的ID来获取对应的城市名
  20.                 string sqlcity =string.Format("select * from City where Proid='{0}'",provId);
  21.                 SqlDataReader readercity = DbHelperSQL.ExecuteReader(sqlcity);
  22.                 string resultCity = "";
  23.                 while (readercity.Read())
  24.                 {
  25.                     string cityId = readercity[1].ToString();
  26.                     string cityName = readercity[2].ToString();
  27.                     //同样用字符串拼接 用 '|' 来隔离 同一省份 的各个城市
  28.                     resultCity += "|" + string.Format("{0},{1}", cityId, cityName);
  29.                 }
  30.                 //去除第一个 '|' ,并且在最后拼接上 '&' 来区分省份和城市
  31.                 resultProv = resultProv.Substring(1) + "&";
  32.                 //最后的结果形式为【id,省份名|id2,省份名2|....&id,城市名|id2,城市名2|.....】
  33.                 string result = resultProv + resultCity.Substring(1);
  34.                 Response.Write(result);
  35.                 Response.End();
  36.             }
  37.         }

后台代码其实很简单,就是根据传过来的参数从数据库获取对应的数据,但是这里我们把获取到得数据最后都用字符串拼接起来了,而且是有规律的拼接,这是为什么呢?其实在注释上已经讲明了,就是为了方便前台获取对应的数据了,因为我们是使用后台返回文本形式的数据,这就是为什么我们拼接字符串了。。

接下来我们来实现前台,前台主要的任务就是获取后台返回的数据,并实现绑定......也是分块贴上代码

 
 
 
 
  1. //实例化XmlHttpRequest对象
  2.  var xhr = null;
  3.         function CreateXhr() {
  4.             if (window.ActiveXObject) 
  5.             {
  6.                 try
  7.                 {
  8.                     xhr = new ActiveXObject("Microsoft.XMLHTTP");
  9.                 }
  10.                 catch (e) 
  11.                 {
  12.                     try
  13.                     {
  14.                         xhr = new ActiveXObject("Msxml2.XMLHTTP");
  15.                     }
  16.                     catch (e) 
  17.                     {
  18.                         xhr = null;
  19.                     }
  20.                 }
  21.             }
  22.             if (window.XMLHttpRequest) {
  23.                 xhr = new XMLHttpRequest();
  24.             }
  25.             return xhr;
  26.         }

当页面载入时,实现省份框以及第一个省份对应的城市框的绑定,代码:

 
 
 
 
  1. //载入绑定省份 
  2.        function getLoadProv() {
  3.            CreateXhr();
  4.            xhr.onreadystatechange = WatchState;
  5.            xhr.open("get", "getProvCity.aspx?provid=1&time=" + new Date());
  6.            xhr.send(null);
  7.        }
  8.        //监听载入绑定时状态
  9.        function WatchState() {
  10.            if (xhr.readyState == 4 && xhr.status == 200) {
  11.                //1,**|2,**&1,##|2,##
  12.                var result = xhr.responseText;
  13.                var provs = result.split('&')[0].split('|');
  14.                var citys = result.split('&')[1].split('|');
  15.                //省份下拉框清空
  16.                document.forms[0].prov.length = 0;
  17.                //绑定省份框
  18.                for (var i = 0; i < provs.length; i++) {
  19.                    var prov = provs[i].split(',');
  20.                    //实例化一个选项
  21.                    var op = new Option();
  22.                    op.value = prov[0];
  23.                    op.text = prov[1];
  24.                    document.forms[0].prov.options.add(op);
  25.                }
  26.                //城市下拉框清空
  27.                document.forms[0].city.length = 0;
  28.                //绑定城市框
  29.                for (var j = 0; j < citys.length; j++) {
  30.                    var city = citys[j].split(',');
  31.                    var op = new Option();
  32.                    op.value = city[0];
  33.                    op.text = city[1];
  34.                    document.forms[0].city.options.add(op);
  35.                }                
  36.            }
  37.        }

当省份框的选项发生变化时实现联级变化,代码:

 
 
 
 
  1. //获取城市
  2. function GetCity() {
  3.    
  4.     //获取省份框选中的值
  5.     var provId = document.forms[0].prov.value;
  6.     CreateXhr();
  7.     xhr.onreadystatechange = UpdateCity;
  8.     xhr.open("get", "getProvCity.aspx?provid=" + provId + "&time=" + new Date());
  9.     xhr.send(null);
  10. }
  11. //修改城市下拉框内容
  12. function UpdateCity() {
  13.     if (xhr.readyState == 4 && xhr.status == 200) {
  14.         var result = xhr.responseText;
  15.         var citys = result.split('&')[1].split('|');
  16.         //城市下拉框清空
  17.         document.forms[0].city.length = 0;
  18.         //绑定城市框
  19.         for (var j = 0; j < citys.length; j++) {
  20.             var city = citys[j].split(',');
  21.             var op = new Option();
  22.             op.value = city[0];
  23.             op.text = city[1];
  24.             document.forms[0].city.options.add(op);
  25.         }                
  26.     }

前台html代码:

 
 
 
 
  1. html
  2.  
  3.      
  4.      
  5.          
  6.          
  7.          
  8.          
  9.      
  •      
  •  
  • #p#

    实例二:利用$.get,$.post方法获取当前时间

    $.get():

    定义:get()方法通过远程HTTP GET请求载入信息

    语法:$(selector).get(url,data,success(response,status,xhr),dataType)

    参数

    url:必须,请求发送的地址。

    data:可选,发送到服务器的数据。

    success:可选,请求成功时运行的函数

    1).response:包含结果的数据

    2).status:包含请求的状态

    3).xhr:包含XmlHttpRequest对象

    dataType:服务器响应的数据类型,默认将智能判断

    $.post()

    定义:post()方法通过远程HTTP Post请求载入信息

    语法:$(selector).post(url,data,success(data,status,jqXHR),dataType)

    参数

    url:必须,请求发送的地址。

    data:可选,发送到服务器的数据。

    success:可选,请求成功时运行的函数

    1).data:包含结果的数据

    2).status:包含请求的状态

    3).jqXHR:包含XmlHttpRequest对象

    dataType:服务器响应的数据类型,默认将智能判断

    由于实例相当简单,直接上所有代码:

     
     
     
     
    1. protected void Page_Load(object sender, EventArgs e)
    2.        {
    3.            string time = "";
    4.            //Get
    5.            if (Request.QueryString["time"]!=null)
    6.            {
    7.                time = "Get:"+ Request.QueryString["time"].ToString();
    8.            }
    9.            //Post
    10.            if (Request.Form["time"] != null)
    11.            {
    12.                time = "Post:" + Request.Form["time"].ToString();
    13.            }
    14.            Response.Write(time + "  现在:" + DateTime.Now.ToString());
    15.            Response.End();
    16.        }

    前台获取时间

     
     
     
     
    1.  
    2.      $(function () {
    3.          //参数:直接在页面之后加?拼加
    4.          $("#btnGet").click(function () {
    5.              $.get("data.aspx?time=" + new Date(), Succeed);
    6.          });
    7.          //参数:使用键值来表示需要传递的参数
    8.          $("#btnPost").click(function () {
    9.              $.post("data.aspx", { time: new Date() }, Succeed);
    10.          });
    11.      });
    12.      function Succeed(result) {
    13.          $("#tbShow").val(result);
    14.      }
    15.  
     
     
     
     
    1.     
    2.         
    3.           
    4.           
    5.           
    6.           
    7.         
  •     
  • #p#

    实例三:使用$.ajax实现获取后台数据,后台返回数据格式为text,json,xml三种类型

    $.ajax()

    定义:ajax()方法通过远程HTTP请求载入信息

    语法:Jquery.ajax([settings])

    常用参数[settings]--用于配置Ajax的键值对请求

    url:必须,请求发送的地址

    type: 请求方式

    data:可选,发送到服务器的数据

    success:可选,请求成功时运行的函数

    1).data:包含结果的数据

    2).status:包含请求的状态

    3).jqXHR:包含XmlHttpRequest对象

    dataType:服务器响应的数据类型,默认将智能判断

    其余参数详情参见:http://www.w3school.com.cn/jquery/ajax_ajax.asp

    1>.test格式 --获取时间的时,分,秒

    后台代码:

     
     
     
     
    1. public partial class textData : System.Web.UI.Page
    2.    {
    3.        protected void Page_Load(object sender, EventArgs e)
    4.        {
    5.            string hour = DateTime.Now.Hour.ToString();
    6.            string minute = DateTime.Now.Minute.ToString();
    7.            string second = DateTime.Now.Second.ToString();
    8.            string textStr = hour + "/" + minute + "/" + second;
    9.            Response.Write(textStr);
    10.            Response.End();
    11.        }
    12.    }

    前台获取代码:

     
     
     
     
    1.     $(function () {
    2.         $("#btnText").click(function () {
    3.             $.ajax({
    4.                 url: "textData.aspx",
    5.                 type: "get",
    6.                 dataType: "text",
    7.                 success: textSucceed,
    8.                 error: Error
    9.             });
    10.         });
    11.     });
    12.     //成功
    13.     function textSucceed(result) {
    14.         $("#tbShow").val(result);
    15.     }
    16.     //错误函数
    17.     function Error() {
    18.         alert("Error!!!");
    19.     }

    2>.Json格式 --获取时间的时,分,秒

    我们需要在后台返回Json格式的数据,添加一个dll链接库,类似.Net中处理Json数据的API ,如图:

    Json格式后台代码:

     
     
     
     
    1. Json后台
    2.  //添加引用
    3.  using Newtonsoft.Json;
    4.  namespace AJAX.Json
    5.  {
    6.      public partial class jsonData : System.Web.UI.Page
    7.      {
    8.          protected void Page_Load(object sender, EventArgs e)
    9.          {
    10.              string hour = DateTime.Now.Hour.ToString();
    11.              string minute = DateTime.Now.Minute.ToString();
    12.              string second = DateTime.Now.Second.ToString();
    13.  
    14.              //匿名类型
    15.              var time = new { h = hour, m = minute, s = second };
    16.  
    17.              //转Json格式
    18.              var jsonStr = JsonConvert.SerializeObject(new[] { time });
    19.  
    20.              Response.Write(jsonStr);
    21.  
    22.              Response.End();
    23.          }
    24.      }
    25.  }

    Json格式前台代码:

     
     
     
     
    1.     
    2.         $("#btnJson").click(function () {
    3.             $.ajax({
    4.                 url: "jsonData.aspx",
    5.                 type: "get",
    6.                 dataType: "json",
    7.                 success: jsonSuccess,
    8.                 error: Error
    9.             });
    10.         });
    11.         //成功
    12.         function jsonSuccess(result) {
    13.             //[{h:10,m:20,s:30}]
    14.             //key:数组元素下标-此时为0
    15.             //value:{ h:10,m:20,s:30 }
    16.             $.each(result, function (key, value) {
    17.                 var h = value.h;
    18.                 var m = value.m;
    19.                 var s = value.s;
    20.                 $("#tbShow").val(h + ":" + m + ":" + s);
    21.             });
    22.         }
    23.        
    24.         //错误函数
    25.         function Error() {
    26.             alert("Error!!!");
    27.         }
    28.     

    3>.xml格式--获取用户名,出生年月

    Xml格式后台代码:

     
     
     
     
    1. //添加引用
    2. using System.Xml;
    3. namespace AJAX.Ajax_Xml
    4. {
    5.     public partial class XmlData : System.Web.UI.Page
    6.     {
    7.         protected void Page_Load(object sender, EventArgs e)
    8.         {
    9.             string name = "zld";
    10.             string birth = "1990-1-8";
    11.             //第一种:直接字符串拼接
    12.             string xmlStr = "" + name + "" + birth + "";
    13.             //第二种:XmlDocument创建
    14.             //创建文档
    15.             XmlDocument xmlDocument = new XmlDocument();
    16.             //文档头声明
    17.             XmlDeclaration xd = xmlDocument.CreateXmlDeclaration("1.0","utf-8",null);
    18.             xmlDocument.AppendChild(xd);
    19.             //添加根节点
    20.             XmlElement root = xmlDocument.CreateElement("root");
    21.             xmlDocument.AppendChild(root);
    22.             //给根节点添加子节点
    23.             XmlElement node1 = xmlDocument.CreateElement("Name");
    24.             node1.InnerText = name;
    25.             root.AppendChild(node1);
    26.             XmlElement node2 = xmlDocument.CreateElement("Birth");
    27.             node2.InnerText = birth;
    28.             root.AppendChild(node2);
    29.             //获取节点元素
    30.             string xmlStr2 = xmlDocument.OuterXml;
    31.             Response.Write(xmlStr2);
    32.             Response.End();
    33.         }
    34.     }
    35. }

    Xml格式前台代码:

     
     
     
     
    1.     
    2.         $(function () {
    3.             $("#btnXml").click(function () {
    4.                 $.ajax({
    5.                     url: "XmlData.aspx",
    6.                     type: "get",
    7.                     dataType: "xml",
    8.                     success: Success,
    9.                     error: function (result) {
    10.                         alert("相应内容非xml格式!");
    11.                     }
    12.                 });
    13.             });
    14.         });
    15.         function Success(xmlResult) {
    16.             //获取返回结果
    17.             var result = xmlResult;
    18.             //找寻根节点并循环遍历
    19.             $(result).find('root').each(function (key) {
    20.                 //获取子节点名为Name的值
    21.                 var name = $(this).children("Name").text();
    22.                 //获取子节点名为Birth的值
    23.                 var birth = $(this).children("Birth").text();
    24.                 $("#tbShow").val(name + ":" + birth);
    25.             });
    26.         }
    27.     

    #p#

    实例四:ajax调用wcf获取数据

    首先贴上模块图:

    首先定义好数据契约和操作契约,贴上StudentService.svc代码:

     
     
     
     
    1. StudentService.svc
    2.  namespace ajaxwcf
    3.  {
    4.      [ServiceContract(Namespace = "")]
    5.      [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    6.      public class StudentService
    7.      {
    8.          // 要使用 HTTP GET,请添加 [WebGet] 特性。(默认 ResponseFormat 为 WebMessageFormat.Json)
    9.          // 要创建返回 XML 的操作,
    10.          //     请添加 [WebGet(ResponseFormat=WebMessageFormat.Xml)],
    11.          //     并在操作正文中包括以下行:
    12.          //         WebOperationContext.Current.OutgoingResponse.ContentType = "text/xml";
    13.          [OperationContract]
    14.          //获取学生数据
    15.          public List GetStudents()
    16.          {
    17.              string sqlConn = ConfigurationManager.ConnectionStrings["SqlConn"].ConnectionString;
    18.              SqlConnection conn = new SqlConnection(sqlConn);
    19.              SqlDataAdapter da = new SqlDataAdapter("select * from AJAX_Tab", conn);
    20.              DataSet ds = new DataSet();
    21.              da.Fill(ds);
    22.              List Stulis = new List();
    23.              DataTable dt = ds.Tables[0];
    24.              Student student = null;
    25.              foreach (DataRow row in dt.Rows)
    26.              {
    27.                  student = new Student();
    28.                  student.Sname = row[ 新闻标题:AJAX调用方式总结
      标题链接:http://www.shufengxianlan.com/qtweb/news43/54743.html

      网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

      广告

      声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

    猜你还喜欢下面的内容

    网站建设知识

    同城分类信息