ASP.NET使用Ajax返回Json对象的方法
程序员文章站
2023-11-18 16:36:28
一、新建一个html页面,如注册页面"register.htm"
一、新建一个html页面,如注册页面"register.htm"
<!doctype html> <html > <head> <title>用户注册</title> <meta charset="utf-8" /> <style type="text/css"> .msg { color:red; } </style> </head> <body> <!-- 因为是ajax提交,html表单控件可以不必放在form里,且不能使用提交按纽(type="submit"),而使用普通按纽(type="button") --> 用户名:<input type="text" name="id" id="id" /><span id="idmsg" class="msg"></span><br /> <!-- span用来显示错误信息 --> 密 码:<input type="password" name="pwd" id="pwd" /><span id="pwdmsg" class="msg"></span><br /> 姓 名:<input type="text" name="name" id="xm" /><span id="namemsg" class="msg"></span><br /> <input id="btnreg" type="button" value="注册" /> <script type="text/javascript" src="bootstrap/js/jquery.js"> </script> <script src="reg.js" type="text/javascript"></script> </body> </html>
二、新建一js文件,如:reg.js
$(function() { //定义清除错误信息的函数 function clearmsg() { $(".msg").html(""); } //定义获取表单数据的函数,注意返回json对象 function formdata() { return { id: $("#id").val(), pwd: $("#pwd").val(), name: $("#xm").val() }; } //定义注册功能的函数 function reg() { var url = "register.ashx"; var data = formdata(); clearmsg(); $.ajax({ type: 'get', //自动会把json对象转换为查询字符串附在url后面如:http://localhost:49521/register.ashx?id=a&pwd=b&name=c url: url, datatype: 'json', //要求服务器返回一个json类型的数据,如:{"success":true,"message":"注册成功"} contenttype: 'application/json',//发送信息给服务器时,内容编码的类型 data: data, //提交给服务器的数据,直接使用json对象的数据,如:{"id":"a","pwd":"b","name":"c"} (如果要求json格式的字符串,可使用用json.stringify(data)) success: function(responsedata) {//如果响应成功(即200) if (responsedata.success == true) {//responsedata也是json格式,如:{"success":true,"message":"注册成功"} alert(responsedata.message); } else { var msgs = responsedata.msgs;//msgs对象是一个数组,如下所示: //{"success":false,"message":"注册失败","msgs":[{"id":"pwdmsg","message":"密码不能为空."},{"id":"namemsg","message":"姓名不能为空."}]} for (var i = 0; i < msgs.length; i++) { $('#' + msgs[i].id).html(msgs[i].message); } } }, error: function() { //要求为function类型的参数,请求失败时被调用的函数。该函数有3个参数,即xmlhttprequest对象、错误信息、捕获的错误对象(可选)。ajax事件函数如下: //function(xmlhttprequest, textstatus, errorthrown){ //通常情况下textstatus和errorthrown只有其中一个包含信息 //this; //调用本次ajax请求时传递的options参数 alert(arguments[1]); } });//ajax } //定义一个初始化函数 function init() { $("#btnreg").click(function() { reg(); }); } //调用初始化函数 init(); });
三、处理ajax请求
方法一:手动拼接json字符串
新建一般处理程序,如:register.ashx
using system; using system.collections; using system.data; using system.linq; using system.web; using system.web.services; using system.web.services.protocols; using system.xml.linq; using system.collections.generic; namespace weblogin { /// <summary> /// $codebehindclassname$ 的摘要说明 /// </summary> [webservice(namespace = "http://tempuri.org/")] [webservicebinding(conformsto = wsiprofiles.basicprofile1_1)] public class register1 : ihttphandler { public void processrequest(httpcontext context) { context.response.contenttype = "application/json";//设置响应内容的格式是json格式 string id = context.request["id"]; string pwd = context.request["pwd"]; string name = context.request["name"]; list<string> msglist = new list<string>(); if (string.isnullorempty(id)) { msglist.add("{\"id\":\"idmsg\",\"message\":\"用户名不能为空.\"}"); } if (pwd==null || pwd=="") { msglist.add("{\"id\":\"pwdmsg\",\"message\":\"密码不能为空.\"}");//形如:{"id":"pwdmsg","message":"密码不能为空."} } if (name==null || name=="") { msglist.add("{\"id\":\"namemsg\",\"message\":\"姓名不能为空.\"}"); } string responsetext = ""; if (msglist.count == 0) { //调用后台代码写入数据库 responsetext = "{\"success\":true,\"message\":\"注册成功\"}"; } else { string msgsvalue = ""; for (int i = 0; i < msglist.count; i++) { msgsvalue += msglist[i] + ",";//将列表中的每一个字符串连接起来,用","隔开,不过最后还会多"," } msgsvalue=msgsvalue.substring(0, msgsvalue.length - 1);//去掉末尾的"," msgsvalue = "[" + msgsvalue + "]";//用"[]"括起来,如:[{"id":"pwdmsg","message":"密码不能为空."},{"id":"namemsg","message":"姓名不能为空."}] responsetext = "{\"success\":false,\"message\":\"注册失败\",\"msgs\":" + msgsvalue + "}"; //最的形如:{"success":false,"message":"注册失败","msgs":[{"id":"pwdmsg","message":"密码不能为空."},{"id":"namemsg","message":"姓名不能为空."}]} } context.response.write(responsetext); } public bool isreusable { get { return false; } } } }
方法二:使用json.net工具来将c#对象转换json输出
1、新建信息类“msg.cs”
using system; using system.data; using system.configuration; using system.linq; using system.web; using system.web.security; using system.web.ui; using system.web.ui.htmlcontrols; using system.web.ui.webcontrols; using system.web.ui.webcontrols.webparts; using system.xml.linq; namespace weblogin { public class msg { private string id; public string id { get { return id; } set { id = value; } } private string message; public string message { get { return message; } set { message = value; } } public msg(string id, string message) { this.id = id; this.message = message; } } }
2、新建返回json对象的类“responsedata.cs”
using system; using system.data; using system.configuration; using system.linq; using system.web; using system.web.security; using system.web.ui; using system.web.ui.htmlcontrols; using system.web.ui.webcontrols; using system.web.ui.webcontrols.webparts; using system.xml.linq; using system.collections.generic; namespace weblogin { public class responsedata { private bool success; public bool success { get { return success; } set { success = value; } } private string message; public string message { get { return message; } set { message = value; } } private list<msg> msgs; public list<msg> msgs { get { return msgs; } set { msgs = value; } } public responsedata(bool success, string message) { this.success = success; this.message = message; } public responsedata(bool success, string message, list<msg> msgs) { this.success = success; this.message = message; this.msgs = msgs; } } }
3、去官网下载json.net,并复制引用
官网:
下载地址:http://pan.baidu.com/s/1nvz9jbv
下载解压后将“newtonsoft.json.dll”复制到项目的“bin”目录中,并引用(注意和.net版本保持一致)
4、新建一般处理程序“reg.ashx”
using system; using system.collections; using system.data; using system.linq; using system.web; using system.web.services; using system.web.services.protocols; using system.xml.linq; using system.collections.generic; using newtonsoft.json;//引入 namespace weblogin { /// <summary> /// $codebehindclassname$ 的摘要说明 /// </summary> [webservice(namespace = "http://tempuri.org/")] [webservicebinding(conformsto = wsiprofiles.basicprofile1_1)] public class reg : ihttphandler { public void processrequest(httpcontext context) { context.response.contenttype = "application/json";//设置响应内容的格式是json格式 string id = context.request["id"]; string pwd = context.request["pwd"]; string name = context.request["name"]; list<msg> msgs = new list<msg>(); if (string.isnullorempty(id)) { msgs.add(new msg("idmsg", "用户名不能为空.")); } if (string.isnullorempty(pwd)) { msgs.add(new msg("pwdmsg", "密码不能为空.")); } if (string.isnullorempty(name)) { msgs.add(new msg("namemsg", "姓名不能为空.")); } responsedata rdata; if (msgs.count == 0) { //调用注册方法,写入数据库 rdata = new responsedata(true, "注册成功."); } else { rdata = new responsedata(false, "注册失败.", msgs); } context.response.write(jsonconvert.serializeobject(rdata));//直接调用方法将rdata转换为json字符串 } public bool isreusable { get { return false; } } } }
四、完成效果如图
以上所述是小编给大家介绍的asp.net使用ajax返回json对象的方法,希望对大家有所帮助
上一篇: 平面设计中字库使用的问题解答
推荐阅读