ASP.NET—Ajax的基本使用
发布日期:2021-06-29 11:15:59 浏览次数:2 分类:技术文章

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

什么是Ajax

  我的理解就是异步请求,在不刷新页面的情况下也可以向服务器发送请求。比如:注册的时候检查用户名是否可以使用,普通的方式就是在文本框后添加一个按钮,点击这个按钮访问数据库检查用户名是否可用,在此期间用户什么也做不了,只能等待服务器返回结果;而利用Ajax,只要文本框失去焦点,浏览器就会自动向服务器发起请求,并且不刷新页面,使用户感觉不到,在此期间,用户还可以继续输入密码。就类似于单线程和多线程,相当于在后台开启了一个线程,自动去执行检查。

为什么要用Ajax?

  除了上面说到的它是一种异步执行之外,利用Ajax还有一个优点就是:从服务器请求数据时不用返回整个页面+数据,而只需要返回所需要的数据就可以了,因为它不需要刷新整个页面。

怎么使用Ajax?

  1. 第一个问题就是当从服务器返回的是list集合时,而前端页面是html,html页面并不认识list,那么应该如何进行数据之间的转换呢?

  答案有两种:一种是转换成XML格式,一种是转换成Json格式。不过现在都用Json格式,为什么呢?XML格式和Json格式又有什么区别呢?
  Json是一种轻量级的数据交换格式,Json的传输效率要比XML格式的传输效率高,因为XML格式中有大量的标签,而Json格式是一种键值对的格式,所以用Json传输数据的数据量要比XML格式小,所以传输效率就更高一些。

  2. 怎么将list集合转换成Json格式呢?

using System.Web.Script.Serialization;UserInfo userInfo = userInfoService.GetUserInfo(id);JavaScriptSerializer javaScriptSerializer = new JavaScriptSerializer();context.Response.Write(javaScriptSerializer.Serialize(userInfo));

需要先引用System.Web.Script.Serialization这个命名空间,然后利用C#再带的方法进行序列化。

  3. 当前台页面,比如html,接收到从服务器发来的Json数据时如何进行反序列化呢?在这儿只介绍三种方法,还有其他的方法,大家可以自行学习。

  第一种:

$.post("GetJson.ashx", "{}", function (data) {
alert(data.name);},"json");

  第二种:

$.post("GetJson.ashx", "{}", function (data) {
var serverData = $.parseJSON(data); alert(serverData.name);});

  第三种:

$.getJSON("GetJson.ashx", "{}", function (data) {
alert(data.name);});

  4. 可能我们接收的数据有时候包含日期,日期用上面的方法序列化时会变成这样的格式"RegTime":"\/Date(1548214679000)\/",在这儿记录一下如何将它转换成正常的日期:2019-01-23

//将序列化成json格式后日期(毫秒数)转成日期格式function ChangeDateFormat(cellval) {
var date = new Date(parseInt(cellval.replace("/Date(", "").replace(")/", ""), 10)); var month = date.getMonth() + 1 < 10 ? "0" + (date.getMonth() + 1) : date.getMonth() + 1; var currentDate = date.getDate() < 10 ? "0" + date.getDate() : date.getDate(); return date.getFullYear() + "-" + month + "-" + currentDate;}

  5. 如果我们需要向服务器传递数据,那么如何在客户端将整个form表单中的数据进行序列化呢?

//将表单中的数据序列化成json串var pars = $("#addUserForm").serializeArray();

使用中遇到的小问题

  一般我们利用Ajax时,请求的一般是一般处理程序,当然也可以请求web窗体,可是当请求web窗体时就会有一个问题,服务器除了返回给我们需要的数据之外,还会额外将整个aspx页面返回,而我们需要的只是数据,并不是页面。所以这种情况该如何处理呢?

  解决方法:我们只需在在Response.write后,加一句Response.End()就可以搞定了。比如:

context.Response.Write(javaScriptSerializer.Serialize(userInfo));context.Response.End();

转载地址:https://blog.csdn.net/zwj_jyzl/article/details/88095961 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:ASP.NET—Cache以及跨线程访问
下一篇:ASP.NET—Session

发表评论

最新留言

很好
[***.229.124.182]2024年04月11日 10时10分17秒