validation用户名ajax和json以及asp.net

所以我是json / ajax / jquery / webservices的新手

我正在尝试建立一个连接页面,用户可以输入几个字母,并获得用户名是否可用的即时反馈。

我有一个html文件[用户前端]和一个asmx webservice,webservice检查它是否存在它存在的任何文本[它运行一个工作正常的存储过程]

我的html文件似乎不是调用我的webservice。

我通过转到asmx页面并手动输入值来validationweb服务的工作原理,它为我返回true或false。
一个问题是它似乎是在XML中返回它,如下所示,而不是我想要的json

 {"available": false} 

所以关于代码/标记!

我的html文件

       <!-- $(document).ready(function () { var validateUsername = $('#validateUsername'); $('#username').keyup(function () { var t = this; if (this.value != this.lastValue) { if (this.timer) clearTimeout(this.timer); validateUsername.removeClass('error').html(' checking availability...'); this.timer = setTimeout(function () { $.ajax({ contentType: "application/json; charset=utf-8", url: 'ValidateUser.asmx/GetUsernameAvailable', data: '{username: "'+t.value + '"}', dataType: 'json', type: "post", success: function (j) { validateUsername.html('I willl have my logic in here for changing the html on the label to reflect success or failure!'); } }); }, 200); this.lastValue = this.value; } }); }); //-->    

我的asmx文件

  using System; using System.Web; using System.Collections; using System.Web.Services; using System.Web.Services.Protocols; using System.Data; using System.Data.Odbc; using System.Web.Script.Serialization; using System.Web.Script.Services; using UserSite.DataClasses; [WebService(Description = "Web services to query Username availability.", Namespace = "http://localhost")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] [ScriptService] public class ValidateUser: System.Web.Services.WebService { [WebMethod(Description = "Gets the availability of a username.")] [ScriptMethod(ResponseFormat = ResponseFormat.Json)] public string GetUsernameAvailable(string username) { if (username == null) { username = ""; } DbaseExecSpWithReturnValue Sproc = new DbaseExecSpWithReturnValue(); Sproc.SetSp("sp_CheckUsernameAvailable"); Sproc.AddParam(1); Sproc.AddParam("Username", SqlDbType.Char, username, 20); int RetVal = Sproc.Execute(); Sproc.Close(); if (RetVal == 0) { return @"{""available"": false}"; } else { return @"{""available"": true}"; } } } 

因此,当我手动运行asmx文件但是html页面没有调用它并且我的asmx文件没有返回数据时,我看到存储过程正常工作…..所以基本上它让我疯了!

您使用的是哪个版本的.NET – 如果是3.5,那么请确保您在web.config中注册了ScriptHandlerFactory和ScriptModule – 这些版本负责处理JSON请求。

第二个问题是,在实际的服务实现中,您应该返回所需的对象,ASP.NET基础结构将处理JSON序列化 – 您不必输出实际的JSON数据。 例如,

 public bool GetUsernameAvailable(string username) { ... return (RetVal == 0) ? false : true; } 

上面会返回布尔值,你可以在你的调用函数中调用它作为jd 。 例如,

 ... $ajax({ ... success: function (j) { alert(jd); // will alert either true or false } ... 

最后,在浏览器中导航到asmx端点将调用soap端点,并且您将始终获得xml请求 – 响应(这是因为ASP.NET脚本处理程序仅在请求为POST请求且内容类型为JSON时才执行JSON序列化)。 正确的调试方法是检查Fiddler等工具中的服务调用。

我认为你的ajax调用数据不正确。 根据jquery文档:data选项可以包含forms为key1 = value1&key2 = value2的查询字符串,或者包含{key1:’value1’,key2:’value2′}forms的映射。 如果使用后一种forms,则在发送之前使用jQuery.param()将数据转换为查询字符串。 尝试使用你的ajax而不发送日期来测试你是否可以调用你的WS然后尝试类似的东西

 data :{'username':t.value }