2010-11-01 6 views
0

Je ne sais pas si c'est juste le moment de la journée, le manque de café ou de trop sucreries de la nuit dernière. En plus de ça j'essaye de faire fonctionner ça. Je ne souhaite pas modifier/modifier/ajouter une nouvelle méthode de service Web.Appel de service Web Jquery ASMX - envoyer/recevoir des types complexes

J'ai un service Web ASMX:

public UserLogin Login(UserLogin p_objUserLogin) 
{ 
} 

J'ai besoin de brancher un appel ajax JQuery jusqu'à ce. L'objet UserLogin est pas complexe:

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; } 
} 

L'objet de UserDetails est assez grand, et comprend beaucoup plus de données. (J'espère que je n'ai pas besoin de construire tout l'arbre des objets pour que cela fonctionne).

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; } 
} 

Le script que je suis jouer avec:

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); 
     } 
    }); 

} 

Toute aide serait tout à fait étonnant.

+0

Échec complet de l'appel WebMethod. Si non, à quoi ressemble l'objet que vous avez dans votre méthode Login? – brumScouse

+0

La connexion en méthode sur le serveur? Habituellement, il est rempli avec ClientID, UserName, EncryptedPassword. Mon service Web n'est pas touché du tout. Les journaux de savon ne sont pas générés non plus. –

Répondre

0

Assurez-vous que la classe WebService et la méthode sont décorées pour traiter les demandes de paiement ajax/JSON entrants:

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

Je ne suis pas familier avec la notation que vous utilisez pour configurer votre objet de charge utile (p_objUserLogin [ « de ClientCodeID » ] = "Test";). Je l'ai souvent utilisé la notation légèrement différente:

p_objUserLogin.ClientCodeID = 'Test'; 

Toutefois, cela pourrait être un hareng rouge - Je ne suis pas un expert JS-objets, de sorte que votre notation peut être parfaitement valide. Enfin, je ne suis pas sûr que JS convertira automatiquement votre objet en JSON (var DTO = {'p_objUserLogin': p_objUserLogin};). J'utilise le json2 library pour sérialiser explicitement des objets JS à JSON:

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

Hope this vous aide à clouer la question.

+0

Merci pour la réponse. J'utilise JSON.Stringify, mais je vais essayer de le déplacer dans le var DTO comme vous l'avez dit. –

Questions connexes