我打算使用以下 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 数据时为 a 指定可选参数?
我知道我可以将参数减少到只需要的值,然后HttpContext.Request.Params
用来读取可选参数的值,但我认为我在这里尝试的方式应该有效。
编辑
XMLHttpRequest.responseText
错误值为:
无效的 JSON 原语:staffcode。
这让我更加远离问题的气味:(