Java学习者论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

手机号码,快捷登录

恭喜Java学习者论坛(https://www.javaxxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,购买链接:点击进入购买VIP会员
JAVA高级面试进阶视频教程Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程

Go语言视频零基础入门到精通

Java架构师3期(课件+源码)

Java开发全终端实战租房项目视频教程

SpringBoot2.X入门到高级使用教程

大数据培训第六期全套视频教程

深度学习(CNN RNN GAN)算法原理

Java亿级流量电商系统视频教程

互联网架构师视频教程

年薪50万Spark2.0从入门到精通

年薪50万!人工智能学习路线教程

年薪50万!大数据从入门到精通学习路线年薪50万!机器学习入门到精通视频教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程 MySQL入门到精通教程
查看: 557|回复: 0

[默认分类] JQuery以JSON方式提交数据到服务端

[复制链接]
  • TA的每日心情
    开心
    2021-12-13 21:45
  • 签到天数: 15 天

    [LV.4]偶尔看看III

    发表于 2018-7-11 16:59:10 | 显示全部楼层 |阅读模式
      JQuery将Ajax数据请求进行了封装,从而使得该操作实现起来容易许多。以往我们要写很多的代码来实现该功能,现在只需要调用$.ajax()方法,并指明请求的方式、地址、数据类型,以及回调方法等。下面的代码演示了如何将客户端表单数据封装成JSON格式,然后通过JQuery的Ajax请求将数据发送到服务端,并最终将数据存储数据库中。服务端定义为一个.ashx文件,事实上你可以将服务端定义为任何能接收并处理客户端数据的类型,如Web Service,ASP.NET Page,Handler等。
      首先,在客户端,通过javaScript脚本将页面表单数据封装成JSON格式。GetJsonData()函数完成了这一功能。然后我们通过$.ajax()方法将数据发送到服务端的RequestData.ashx。其中用到了JSON.stringify()方法,它可以将客户端发送的JSON数据对象进行序列化操作,详细的内容可以看这里https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/JSON/stringify

    1. $("#btnSend").click(function() {
    2.     $("#request-process-patent").html("正在提交数据,请勿关闭当前窗口...");
    3.     $.ajax({
    4.         type: "POST",
    5.         url: "RequestData.ashx",
    6.         contentType: "application/json; charset=utf-8",
    7.         data: JSON.stringify(GetJsonData()),
    8.         dataType: "json",
    9.         success: function (message) {
    10.             if (message > 0) {
    11.                 alert("请求已提交!我们会尽快与您取得联系");
    12.             }
    13.         },
    14.         error: function (message) {
    15.             $("#request-process-patent").html("提交数据失败!");
    16.         }
    17.     });
    18. });
    19. function GetJsonData() {
    20.     var json = {
    21.         "classid": 2,
    22.         "name": $("#tb_name").val(),
    23.         "zlclass": "测试类型1,测试类型2,测试类型3",
    24.         "pname": $("#tb_contact_people").val(),
    25.         "tel": $("#tb_contact_phone").val()
    26.     };
    27.     return json;
    28. }
    复制代码

      再来看看服务端的代码,RequestData.ashx.

    1. [Serializable]
    2. public class RequestDataJSON
    3. {
    4.     public int classid { get; set; }
    5.     public string name { get; set; }
    6.     public string zlclass { get; set; }
    7.     public string pname { get; set; }
    8.     public string tel { get; set; }
    9. }
    10. /// <summary>
    11. /// Summary description for RequestData
    12. /// </summary>
    13. public class RequestData : IHttpHandler
    14. {
    15.     public void ProcessRequest(HttpContext context)
    16.     {
    17.         int num = 0;
    18.         context.Response.ContentType = "application/json";
    19.         var data = context.Request;
    20.         var sr = new StreamReader(data.InputStream);
    21.         var stream = sr.ReadToEnd();
    22.         var javaScriptSerializer = new JavaScriptSerializer();
    23.         var PostedData = javaScriptSerializer.Deserialize<RequestDataJSON>(stream);
    24.         tb_query obj = new tb_query();
    25.         obj.classid = PostedData.classid;
    26.         obj.name = PostedData.name;
    27.         obj.zlclass = PostedData.zlclass;
    28.         obj.pname = PostedData.pname;
    29.         obj.tel = PostedData.tel;
    30.         obj.ip = context.Request.UserHostAddress.ToString();
    31.         obj.posttime = DateTime.Now.ToString();
    32.         try
    33.         {
    34.             using (var ctx = new dbEntities())
    35.             {
    36.                 ctx.tb_query.AddObject(obj);
    37.                 num = ctx.SaveChanges();
    38.             }
    39.         }
    40.         catch (Exception msg)
    41.         {
    42.             context.Response.Write(msg.Message);
    43.         }
    44.         context.Response.ContentType = "text/plain";
    45.         context.Response.Write(num);
    46.     }
    47.     public bool IsReusable
    48.     {
    49.         get
    50.         {
    51.             return false;
    52.         }
    53.     }
    54. }
    复制代码

      定义一个带有Serializable特征属性的类RequestDataJSON用来将客户端数据进行反序列化,从而获取到数据并存入数据库。上述代码中使用了EntityFramework,从而使得数据库的交互代码变得很简洁。返回结果有两种,对应ajax中的回调函数success()和error()。在success()回调函数中,如果返回结果的值大于0,则表示通过EntityFramework添加到数据库中的记录数;在error()回调函数中,返回结果则显示了失败的具体信息。
      RequestData类继承了IHttpHandler接口,表明它是以同步的方式处理客户端请求。当然,你也可以将其改为继承IHttpAsyncHandler接口来处理异步请求,代码接口大同小异。
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|Java学习者论坛 ( 声明:本站资料整理自互联网,用于Java学习者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-4-19 22:53 , Processed in 0.384350 second(s), 50 queries .

    Powered by Discuz! X3.4

    © 2001-2017 Comsenz Inc.

    快速回复 返回顶部 返回列表