代码之家  ›  专栏  ›  技术社区  ›  Ryan Ternier

Jquery ASMX Web服务调用-发送/接收复杂类型

  •  0
  • Ryan Ternier  · 技术社区  · 14 年前

    不确定是不是一天中的某个时间,是因为咖啡不足,还是因为昨晚的糖太多。除此之外,我正努力让这件事顺利进行。我不想更改/修改/添加新的web服务方法。

    public UserLogin Login(UserLogin p_objUserLogin)
    {
    }
    

    我需要一个JQuery ajax调用来连接它。UserLogin对象没有那么复杂:

    public class UserLogin
    {
        public UserLogin();
    
        public string Privileges { get; set; }
        public string ClientCodeID { get; set; }
        public UserDetails User { get; set; }
        public string UserLoginMessage { get; set; }
        public bool Valid { get; set; }
    }
    

    UserDetails对象非常大,包含了很多数据。(希望我不需要构建整个对象树来实现这一点)。

    public class UserDetails
    {
        public string CellPhone { get; set; }
        public string Email { get; set; }
        public string EncryptedPassword { get; set; }
        public string FirstName { get; set; }
        public string FullName { get; }
        public string Initials { get; set;
        public bool InService { get; set; }
        public string LastName { get; set; }
        public string Password { get; set; }
        public byte[] Signature { get; set; }
        public string SimCard { get; set; }      
        public int UserID { get; set; }
        public string UserName { get; set; }
        public SecurityRole UserSecurityRole { get; set; }
        public Workgroup UserWorkgroup { get; set; }
    }
    

    我正在玩的剧本:

    function CallService() {
        var p_objUserLogin = {};
        p_objUserLogin['ClientCodeID'] = "Test";
        var DTO = { 'p_objUserLogin': p_objUserLogin };
        $.ajax({
            type: "POST",
            url: "UtilityServices2006.asmx/Login",
            data: JSON.stringify(DTO),
            contentType: "application/json; charset=utf-8",
            dataType: "json",
            processData: true,
            success: function (msg) {
                alert(msg);
            },
            error: function (req, status, error) {
                alert(req + ", " + status + ", " + error);
            },
            complete: function (req, status) {
                alert(req + ", " + status);
            }
        });
    
    }
    

    任何帮助都会很神奇。

    1 回复  |  直到 14 年前
        1
  •  0
  •   mikemanne    14 年前

    确保您的webservice类和方法被修饰为处理传入的ajax/json请求:

    [ScriptService]
    public class MyService: WebService
    {
        [WebMethod]
        [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
        public UserLogin Login(UserLogin p_objUserLogin)
        {
        }
    }
    

    我不熟悉用于配置有效负载对象的符号(p_objUserLogin['ClientCodeID']=“Test”;)。我通常使用稍微不同的符号:

    p_objUserLogin.ClientCodeID = 'Test';
    

    不过,这可能是一个危险的东西-我不是JS对象专家,所以您的符号可能是完全有效的。

    最后,我不确定JS是否会自动将您的对象转换为JSON(var DTO={'p_objUserLogin':p_objUserLogin};)。我用的是 json2 library

    var DTO = { 'p_objUserLogin': JSON.stringify(p_objUserLogin) };
    

    希望这能帮你解决这个问题。