欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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对象的方法

以上所述是小编给大家介绍的asp.net使用ajax返回json对象的方法,希望对大家有所帮助