2010-02-15 7 views
2

je la classe JSON suivante, j'ai l'intention d'utiliser pour effectuer des appels de gestion sur ma base de données de manière asynchrone:Comment transmettre des paramètres optionnels dans un WebMethod via JSON?

<script type="text/javascript"> 

    var CalendarManager = { 

     defaultOptions: { 
      staffcode: 0,  // required 
      date: 0,   // required 
      activityCode: 0, // required 
      clientCode: null, // optional 
      contactCode: null, // optional 
      destination: '', // optional/doesn't matter 
      travelCode: null, // optional 
      miles: null,  // optional 
      overnight: false, // optional 
      notes: ''   // optional/doesn't matter 
     }, 

     createEvent: function(options) { 
      var combinedOptions = $.extend(true, {}, this.defaultOptions, options); 
      $.ajax({ 
       type: "POST", 
       url: 'calendar/calendar-manager-ajax.aspx/CreateEvent', 
       data: combinedOptions, 
       contentType: "application/json; charset=utf-8", 
       dataType: "json", 
       success: function(data, textStatus, XMLHttpRequest) { 
        alert(textStatus + ", " + data); 
       }, 
       error: function(data, textStatus, XMLHttpRequest) { 
        alert(textStatus + ", " + data); 
       } 
      }); 
     } 
    }; 
</script> 

J'utilise ensuite dans ma page comme ceci:

<script type="text/javascript"> 
    CalendarManager.createEvent(); // random test 
</script> 

À l'heure actuelle, Je suis en train d'obtenir ce feu d'appel AJAX la méthode suivante:

[WebMethod()] 
public static string CreateEvent(int staffcode, int date, 
    int activitycode, int? clientcode, 
    int? contactCode, string destination, 
    int? travelcode, int? miles, 
    bool overnight, string notes) 
{ 
    return null; 
} 

Malheureusement, la méthode CreateEvent ne reçoit pas cal conduit, et je reçois une erreur AJAX (réglage d'un point d'arrêt ne stoppe pas l'exécution):

erreur

, [objet XMLHttpRequest]

Si je change data: combinedOptions-data: "{}" et ajouter une autre méthode pour mon ASPX (comme ci-dessous) le code fonctionne avec succès:

[WebMethod()] 
public static string CreateEvent() 
{ 
    return null; 
} 

au fond, ma question est la suivante: comment dois-je spécifier les paramètres facultatifs se rapportant à un WebMethod lors de la fourniture des données JSON? Je sais que je peux réduire les paramètres à seulement les valeurs requises, puis utiliser HttpContext.Request.Params pour lire les valeurs des paramètres facultatifs, mais j'aurais pensé que la façon dont j'ai essayé ici aurait dû fonctionner.

EDIT

La valeur XMLHttpRequest.responseText de l'erreur est:

invalide JSON primitive: staffcode.

Cela me Déverser encore plus le parfum du problème :(

Répondre

1

le fixe. Il 2. ont des problèmes

tout d'abord, le cas de tous mes paramètres était incorrect (note "activityCode" non "activitycode")

Et j'utilise aussi maintenant ceci:.

data: JSON.stringify(combinedOptions) 

Erreurs stupides vraiment, mais là vous l'avez.

2

Il n'y a pas des choses telles que les paramètres « option ». Passez un entier par défaut pour les params inutilisés.

+0

C'est ce que j'essaie de faire - 'null' est utilisé dans les valeurs par défaut, donc les valeurs' int? 'Devraient contenir' null'. Tous les paramètres ont été spécifiés comme vous pouvez le voir. – Codesleuth

+0

dirait que vous êtes déjà à l'endroit où vous devez être. Il n'y a vraiment pas moyen de faire ce que vous suggérez. Je sais, j'ai essayé. Vous ne pouvez pas avoir de paramètres facultatifs et si vous construisez le point de terminaison sans paramètres dans l'espoir de les lire dans le contexte, vous obtiendrez une exception pour les params non reconnus. IIRC. –

Questions connexes