Question

J'ai la classe JSON suivante, j'ai l'intention d'utiliser pour effectuer la gestion appelle ma base de données de manière asynchrone:

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

Je l'utilise alors 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 n'est pas appelé, 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;
}

En fait, ma question est: comment dois-je spécifier des paramètres facultatifs à un WebMethod lors de la fourniture des données JSON

?

Je sais que je peux réduire les paramètres jusqu'à seulement les valeurs requises, et ensuite utiliser HttpContext.Request.Params pour lire les valeurs de paramaters en option, mais je l'aurais pensé comme je l'ai essayé ici devrait avoir travaillé.

EDIT

La valeur de XMLHttpRequest.responseText de l'erreur est la suivante:

  

Invalid JSON primitive. Staffcode

Cela me jette encore plus le parfum du problème: (

Était-ce utile?

La solution 2

Correction d'elle. Il y avait 2 problèmes.

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

Je l'utilise aussi maintenant ceci:

data: JSON.stringify(combinedOptions)

erreurs idiotes vraiment, mais là vous l'avez.

Autres conseils

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top