代码之家  ›  专栏  ›  技术社区  ›  Sharique

通过jquery进行服务调用

  •  0
  • Sharique  · 技术社区  · 17 年前

    我正在尝试使用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”:“at System.Web.Script.Serialization .ObjectConverter.ConvertObjectToTypeInternal(对象o,类型类型,JavaScriptSerializer序列化程序,布尔值 (对象o、类型类型、JavaScriptSerializer序列化程序、布尔throwOnError、对象和转换对象 )\r\n位于System.Web.Script.Serialization.ObjectConverter.ConvertObjectToType(对象o,类型类型,JavaScriptSerializer 序列化程序)\r\n位于System.Web.Script.Serialization.JavaScriptSerializer.Deserialize(JavaScriptSerializer .在System.Web.Script.Services.RestHandler.GetRawParamsFromPostRequest处反序列化[T](字符串输入)\r\n (HttpContext上下文,JavaScriptSerializer序列化程序)\r\n位于System.Web.Script.Services.RestHandler .GetRawParams(WebServiceMethodData方法数据,HttpContext上下文)\r\n位于System.Web.Script.Services .RestHandler.ExecuteWebServiceCall(HttpContext上下文,WebServiceMethodData方法数据)”,“ExceptionType”

    4 回复  |  直到 7 年前
        1
  •  3
  •   Chad Grant    17 年前
    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));
        }
    });
    

    [ScriptMethod( UseHttpGet = false, ResponseFormat = ResponseFormat.Json )]
    
        2
  •  0
  •   neouser99    17 年前

    你试过了吗?

    $.jmsajax({
        ...
        data: { uname: $uname },
        ...
    });
    
        3
  •  0
  •   3Dave    17 年前

    我也遇到了同样的问题,并且发现我在jQuery调用中不知不觉地提交了一个dictionary对象。当提交的对象类型未映射到webmethod所需的参数时,似乎会出现错误。如果在$.ajax(…)调用中没有为“data”字段提供正确的标识符,您将收到此错误。确保为数据字段提供标识符:

    {param_name:“value”}

    {{field1:value”,field2:value}

    嵌套数据将导致.net尝试将对象反序列化为字典。如果您的webmethod需要一个Dictionary对象,那么这也没关系,但在其他方面就没有那么多了。

        4
  •  0
  •   Peter Agambar    13 年前

    只是一个注释,没有太深,但是我在方法签名上使用ByRef而不是ByVal时出现了这个错误!我没有注意到我在做什么,很多次都没注意到代码针和干草堆。