JQuery以JSON方式提交数据到服务端示例代码


Posted in Javascript onMay 05, 2014

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

$("#btnSend").click(function() { 
$("#request-process-patent").html("正在提交数据,请勿关闭当前窗口..."); 
$.ajax({ 
type: "POST", 
url: "RequestData.ashx", 
contentType: "application/json; charset=utf-8", 
data: JSON.stringify(GetJsonData()), 
dataType: "json", 
success: function (message) { 
if (message > 0) { 
alert("请求已提交!我们会尽快与您取得联系"); 
} 
}, 
error: function (message) { 
$("#request-process-patent").html("提交数据失败!"); 
} 
}); 
}); function GetJsonData() { 
var json = { 
"classid": 2, 
"name": $("#tb_name").val(), 
"zlclass": "测试类型1,测试类型2,测试类型3", 
"pname": $("#tb_contact_people").val(), 
"tel": $("#tb_contact_phone").val() 
}; 
return json; 
}

再来看看服务端的代码,RequestData.ashx.
[Serializable] 
public class RequestDataJSON 
{ 
public int classid { get; set; } 
public string name { get; set; } 
public string zlclass { get; set; } 
public string pname { get; set; } 
public string tel { get; set; } 
} /// <summary> 
/// Summary description for RequestData 
/// </summary> 
public class RequestData : IHttpHandler 
{ 
public void ProcessRequest(HttpContext context) 
{ 
int num = 0; 
context.Response.ContentType = "application/json"; 
var data = context.Request; 
var sr = new StreamReader(data.InputStream); 
var stream = sr.ReadToEnd(); 
var javaScriptSerializer = new JavaScriptSerializer(); 
var PostedData = javaScriptSerializer.Deserialize<RequestDataJSON>(stream); 
tb_query obj = new tb_query(); 
obj.classid = PostedData.classid; 
obj.name = PostedData.name; 
obj.zlclass = PostedData.zlclass; 
obj.pname = PostedData.pname; 
obj.tel = PostedData.tel; 
obj.ip = context.Request.UserHostAddress.ToString(); 
obj.posttime = DateTime.Now.ToString(); 
try 
{ 
using (var ctx = new dbEntities()) 
{ 
ctx.tb_query.AddObject(obj); 
num = ctx.SaveChanges(); 
} 
} 
catch (Exception msg) 
{ 
context.Response.Write(msg.Message); 
} 
context.Response.ContentType = "text/plain"; 
context.Response.Write(num); 
} 
public bool IsReusable 
{ 
get 
{ 
return false; 
} 
} 
}

定义一个带有Serializable特征属性的类RequestDataJSON用来将客户端数据进行反序列化,从而获取到数据并存入数据库。上述代码中使用了EntityFramework,从而使得数据库的交互代码变得很简洁。返回结果有两种,对应ajax中的回调函数success()和error()。在success()回调函数中,如果返回结果的值大于0,则表示通过EntityFramework添加到数据库中的记录数;在error()回调函数中,返回结果则显示了失败的具体信息。

RequestData类继承了IHttpHandler接口,表明它是以同步的方式处理客户端请求。当然,你也可以将其改为继承IHttpAsyncHandler接口来处理异步请求,代码接口大同小异。

Javascript 相关文章推荐
浅说js变量
May 25 Javascript
javascript中的previousSibling和nextSibling的正确用法
Sep 16 Javascript
JS实现的表格操作类详解(添加,删除,排序,上移,下移)
Dec 22 Javascript
bootstrap——bootstrapTable实现隐藏列的示例
Jan 14 Javascript
vue2的todolist入门小项目的详细解析
May 11 Javascript
knockoutjs模板实现树形结构列表
Jul 31 Javascript
JS库之ParticlesJS使用简介
Sep 12 Javascript
微信小程序progress组件使用详解
Jan 31 Javascript
一个因@click.stop引发的bug的解决
Jan 08 Javascript
Vue循环中多个input绑定指定v-model实例
Aug 31 Javascript
使用JS实现鼠标放上图片进行放大离开实现缩小功能
Jan 27 Javascript
如何通过简单的代码描述Angular父组件、子组件传值
Apr 07 Javascript
使用jQuery重置(reset)表单的方法
May 05 #Javascript
jQuery实现回车键(Enter)切换文本框焦点的代码实例
May 05 #Javascript
Js操作树节点自动折叠展开的几种方法
May 05 #Javascript
javascript中兼容主流浏览器的动态生成iframe方法
May 05 #Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
May 05 #Javascript
一个简单的jquery的多选下拉框(自写)
May 05 #Javascript
JavaScript日期时间格式化函数分享
May 05 #Javascript
You might like
PHP提交表单失败后如何保留已经填写的信息
2014/06/20 PHP
PHP文件锁函数flock()详细介绍
2014/11/18 PHP
laravel利用中间件做防非法登录和权限控制示例
2019/10/21 PHP
jQuery 全选/反选以及单击行改变背景色实例
2013/07/02 Javascript
Jquery each方法跳出循环,并获取返回值(实例讲解)
2013/12/12 Javascript
javascript学习笔记(八)正则表达式
2014/10/08 Javascript
深入浅析JavaScript中with语句的理解
2016/05/12 Javascript
Bootstrap超大屏幕的实现代码
2017/03/22 Javascript
jQuery条件分页 代替离线查询(附代码)
2017/08/17 jQuery
微信小程序显示下拉列表功能【附源码下载】
2017/12/12 Javascript
浅谈js中的bind
2019/03/18 Javascript
layer.open提交子页面的form和layedit文本编辑内容的方法
2019/09/27 Javascript
JS绘图Flot应用图形绘制异常解决方案
2020/10/16 Javascript
vue下载二进制流图片操作
2020/10/26 Javascript
[06:40]2014DOTA2西雅图国际邀请赛 DK战队巡礼
2014/07/07 DOTA
win7 下搭建sublime的python开发环境的配置方法
2014/06/18 Python
使用Python的turtle模块画图的方法
2017/11/15 Python
Python中str.join()简单用法示例
2018/03/20 Python
python实现C4.5决策树算法
2018/08/29 Python
python装饰器简介---这一篇也许就够了(推荐)
2019/04/01 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
Keras框架中的epoch、bacth、batch size、iteration使用介绍
2020/06/10 Python
python让函数不返回结果的方法
2020/06/22 Python
Python requests上传文件实现步骤
2020/09/15 Python
Regatta官网:英国最受欢迎的户外服装和鞋类品牌
2019/05/01 全球购物
美国牙科折扣计划:DentalPlans.com
2019/08/26 全球购物
学生会竞聘书范文
2014/03/31 职场文书
电钳工人个人求职信
2014/05/10 职场文书
亚运会口号
2014/06/20 职场文书
安全伴我行演讲稿
2014/09/04 职场文书
优秀党务工作者先进事迹材料
2014/12/25 职场文书
2016应届毕业生实习评语
2015/12/01 职场文书
导游词之任弼时故居
2020/01/07 职场文书
详解Js模块化的作用原理和方案
2021/04/29 Javascript
Requests什么的通通爬不了的Python超强反爬虫方案!
2021/05/20 Python
Nginx跨域问题解析与解决
2022/08/05 Servers