我正在尝试使用jquery编写用户名验证,我正在使用jmsajax插件。我测试了webservice,它工作正常。 我收到了错误 Web服务代码
[System.Web.Script.Services.ScriptMethod(ResponseFormat = ResponseFormat.Json)]
[WebMethod]
public bool check_username(string uname)
{
DBMOdelDataContext db = new DBMOdelDataContext();
var q = from p in db.users
where p.username == uname
select p;
if (q.Count() == 0)
return false;
else
return true;
}
Jquery代码。
$(document).ready(function() {
$(".unamebtn").blur(function() {
$uname = $(this).val();
$.jmsajax({
type: "POST",
url: "Services/MyServices.asmx",
data:"{userName='" + $uname + "'}",
method: "check_username",
dataType: "msjson",
success: function(result) {
$("#msg").html(result);
alert(result);
$("#msg").addClass("notice");
}
});
});
});
它抛出的异常。
{“Message”:“无法将类型为\ u0027System.String \ u0027的对象转换为\ u0027System.Collections类型
.Generic.IDictionary`2 [System.String,System.Object] \ u0027“,”StackTrace“:”在System.Web.Script.Serialization
.ObjectConverter.ConvertObjectToTypeInternal(Object o,Type type,JavaScriptSerializer serializer,Boolean
throwOnError,Object&在System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain中的convertedObject)\ r \ n
(Object o,Type type,JavaScriptSerializer serializer,Boolean throwOnError,Object& convertedObject
)\ r \ n在System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(Object o,Type type,JavaScriptSerializer)
序列化程序)\ r \ n在System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer)
System.Web.Script.Serialization.JavaScriptSerializer中的序列化程序,字符串输入,类型类型,Int32 depthLimit)\ r \ n
.Deserialize [T](字符串输入)\ r \ n在System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest
(HttpContext上下文,JavaScriptSerializer序列化程序)\ r \ n在System.Web.Script.Services.RestHandler中
System.Web.Script.Services中的.GetRawParams(WebServiceMethodData methodData,HttpContext context)\ r \ n
.RestHandler.ExecuteWebServiceCall(HttpContext context,WebServiceMethodData methodData)“,”ExceptionType“
: “System.InvalidOperationException”}
答案 0 :(得分:3)
data: {uname:$uname},
实际上要看文档,jMs与普通的jQuery有点不同。 在普通的jQuery中它只是:
$.ajax({
type: "POST",
url: "Services/MyServices.asmx/check_username",
data: "{uname:'" + $uname + "'}",
datatype : 'json',
contentType : 'application/json',
success: function(data) {
$("#div").html(String(data));
}
});
另外,请禁用GET请求以避免CSRF安全问题。
[ScriptMethod( UseHttpGet = false, ResponseFormat = ResponseFormat.Json )]
答案 1 :(得分:0)
$.jmsajax({
...
data: { uname: $uname },
...
});
答案 2 :(得分:0)
我遇到了同样的问题,发现我在不知情的情况下在jQuery调用中提交了一个字典对象。当提交的对象类型未映射到webmethod预期的参数时,似乎会出现错误。如果您未在$ .ajax(...)调用中为“data”字段提供正确的标识符,则会收到此错误。确保您为数据字段指定了一个标识符:
{PARAM_NAME: “值”}
而不是我在做什么 {{FIELD1: “值”,FIELD2:值}}嵌套数据将导致.net尝试将对象反序列化为字典。如果你的webmethod需要一个Dictionary对象,那就没关系,但不是那么多。
答案 3 :(得分:0)
只是一个注释,而不是太深,但是当我在方法签名上使用ByRef而不是ByVal时,我遇到了这个错误!不看我正在做什么,错过了很多次看代码 - 针和干草堆的事情。