Pergunta

Eu tenho a seguinte classe JSON que pretendo usar para executar chamadas de gerenciamento no meu banco de dados de maneira assíncrona:

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

Eu então uso na minha página como assim:

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

No momento, estou tentando obter esta chamada de chamadas Ajax o método a seguir:

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

Infelizmente, o método CreateEvent Não está sendo chamado e recebo um erro de Ajax (definir um ponto de interrupção não para de execução):

Erro, [Objeto XmlHttPrequest

Se eu mudar data: combinedOptions para data: "{}" e adicione outro método ao meu ASPX (como abaixo), o código funciona com sucesso:

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

Basicamente, minha pergunta é: como especificar parâmetros opcionais para um WebMethod Ao fornecer dados JSON?

Eu sei que posso reduzir os parâmetros apenas para os valores necessários e depois usar HttpContext.Request.Params Para ler os valores dos parâmetros opcionais, mas eu teria pensado da maneira que tentei aqui deveria ter funcionado.

EDITAR

o XMLHttpRequest.responseText O valor do erro é:

JSON inválido Primitivo: Staffcode.

Isso está me jogando ainda mais fora do perfume do problema :(

Foi útil?

Solução 2

Corrigido. Havia 2 problemas.

Em primeiro lugar, o caso de todos os meus parâmetros estava incorreto (note "ActivityCode" não "ActivityCode").

E agora também uso isso:

data: JSON.stringify(combinedOptions)

Erros bobos realmente, mas aí está.

Outras dicas

Não existem coisas como parâmetros 'opcionais'. Passe um padrão para parâmetros não utilizados.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top