У меня есть следующий класс 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>
Затем я использую его на своей странице следующим образом:
<script type="text/javascript">
CalendarManager.createEvent(); // random test
</script>
В данный момент я пытаюсь заставить этот вызов AJAX запустить следующий метод:
[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;
}
К сожалению, метод CreateEvent
не вызывается, и я получаю ошибку AJAX (установка точки останова не останавливает выполнение):
ошибка, [объект XMLHttpRequest]
Если я изменю data: combinedOptions
на data: "{}"
и добавлю другой метод в мой ASPX (как показано ниже), код будет успешно работать:
[WebMethod()]
public static string CreateEvent()
{
return null;
}
По сути, мой вопрос: как указать необязательные параметры для WebMethod
при предоставлении данных JSON?
Я знаю, что могу уменьшить параметры до требуемых значений, а затем использовать HttpContext.Request.Params
для чтения значений необязательных параметров, но я бы подумал, что способ, который я здесь пробовал, должен был сработать.
EDIT
Значение XMLHttpRequest.responseText
для ошибки:
Недопустимый примитив JSON: штатный код.
Это еще больше сбивает меня с толку: (