一说到开始,我们当然需要项目。
首先,创建一个Asp.net Web 应用,然后新增一个名称为“Web 服务”的文件,也就是后缀名为".asmx"的文件,然后需要进行配置一下,在Web.Config中加入如下配置节点:
在HttpHandlers节点中,需要注册:
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
然后需要在System.Web下注册WebServices节点:
<webServices> <protocols> <add name="HttpSoap"/> <add name="HttpPost"/> <add name="HttpGet"/> <add name="Documentation"/> </protocols> </webServices>
配置完毕后,下面开始进行具体的讲解。
1.利用Get方式进行数据读写操作
首先,前台,我们代码如下:
$(document).ready(function () { $("#Button1").click(function () { $.ajax({ url: "Ajax/WebService1.asmx/HelloWorld", type: "get", data: "name=John&location=Boston", success: function (result) { $("#test").html(result.text); }, error: function (data) { alert(data.value); } }); }); });
后台,我们的代码如下:
using System.Web.Services; using System.Threading; namespace Nxt.Web.Ajax { [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] [System.Web.Script.Services.ScriptService] public class WebService1 : System.Web.Services.WebService { [WebMethod] public string HelloWorld() { Thread.Sleep(3000); return this.Context.Request.QueryString["name"]; } } }
得到的结果如我们预料,服务器端返回了“John”。
2.利用Post方式进行数据读写操作。
首先是前端代码:
$(document).ready(function () { $("#Button1").click(function () { $.ajax({ url: "Ajax/WebService2.asmx/HelloWorld", type: "post", contentType: "application/json", //from backend dataType: "json", // send to backend data: '{"name":"test"}', success: function (result) { $("#test").html(result.d); }, error: function (data) { //alert(data.value); } }); }); });
然后是后端的处理过程,在前端代码中,我们可以看到,我们通过contentType: "application/json",表明后台传送到前台的是JSON格式的数据。 而通过dataType: "json",则表明我们往后端传送的也是json类型的数据。
using System.Web.Services; using System.Threading; namespace Nxt.Web.Ajax { [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [System.ComponentModel.ToolboxItem(false)] [System.Web.Script.Services.ScriptService] public class WebService2 : System.Web.Services.WebService { [WebMethod] public string HelloWorld(string name) { Thread.Sleep(3000); return name; } } }
这样,我们通过Post方式得到了预期的结果。
这里我需要特别说明的是,当用json数据当做参数通过Post方式传入后台的时候,后台的参数名称可以与前台保持一致。
那么我们后台取值的时候,直接把参数拿过来用就行了。在例子里,我的json数据为:{"name":"test"},那么在后台,我需要获取的值,就保存在了参数 string name中了。
直接拿过来用就行了。
3.直接操作后台返回的List对象
前台代码如下:
$(document).ready(function () { $("#Button1").click(function () { $.ajax({ url: "Ajax/WebService2.asmx/GetList", type: "post", contentType: "application/json", //from backend dataType: "json", // send to backend data: '{"i":"10"}', success: function (result) { $(result.d).each(function (value) { $("#test").append(this.toString()+" "); }); }, error: function (data) { //alert(data.value); } }); }); });
后台代码如下:
[WebMethod] public List<int> GetList(int i) { List<int> list = new List<int>(); do{ list.Add(i); i--; }while(i>0); return list; }
最后,屏幕上打印出了我们需要的数据: 10 9 8 7 6 5 4 3 2 1。
4.直接操作后台返回类对象
前台:
$(document).ready(function () { $("#Button1").click(function () { $.ajax({ url: "Ajax/WebService2.asmx/GetModel", type: "post", contentType: "application/json", //from backend dataType: "json", // send to backend data: '{}', success: function (result) { $(result.d).each(function (value) { debugger; $("#test").append(this["UserID"].toString() + " " + this["UserName"].toString() + " " + this["UserAddr"].toString()); }); }, error: function (data) { debugger; //alert(data.value); } }); }); });
后台代码:
[WebMethod] public Common.TestModel GetModel() { return new Common.TestModel { UserID = 1, UserName = "nxt", UserAddr = "beijing" }; }
5.直接操作返回的dataset数据集
前端代码:
$(document).ready(function () { $("#Button1").click(function () { $.ajax({ url: "Ajax/WebService2.asmx/GetDataSet", type: "post", dataType: "xml", // send to backend data: '{}', success: function (result) { try { $(result).find("Table1").each(function () { $("#test").append($(this).find("ID").text() + " " + $(this).find("Value").text()); }); } catch (e) { alert(e); return; } }, error: function (data) { //alert(data.value); } }); }); });
后端代码:
[WebMethod] public DataSet GetDataSet() { DataSet ds = new DataSet(); DataTable dt = new DataTable(); dt.Columns.Add("ID", Type.GetType("System.String")); dt.Columns.Add("Value", Type.GetType("System.String")); DataRow dr = dt.NewRow(); dr["ID"] = "scy"; dr["Value"] = "河南理工大学"; dt.Rows.Add(dr); dr = dt.NewRow(); dr["ID"] = "scy1"; dr["Value"] = "河南理工大学1"; dt.Rows.Add(dr); ds.Tables.Add(dt); return ds; }
得到的结果是:scy 河南理工大学scy1 河南理工大学1
符合预期。
最后加一个loading效果的特效,以便备忘:
<style type="text/css"> #loading { position:absolute; top:50%; left:50%; } </style>
$(document).ready(function () { $('#loading').ajaxStart(function () { $(this).html("<img src='Images/loading.gif'>").show(); }).ajaxStop(function () { $(this).hide(); }); });
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
2010-09-10 asp.net通过oracle游标得到数据集
2010-09-10 比较实用的Tab标签
2010-09-10 GirdView实现折叠式效果