通过jQuery进行服务调用

时间:2009-04-27 11:22:20

标签: asp.net jquery ajax

我正在尝试使用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”}

4 个答案:

答案 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时,我遇到了这个错误!不看我正在做什么,错过了很多次看代码 - 针和干草堆的事情。