我有以下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错误(设置一个断点不会停止执行):
错误,[object XMLHttpRequest]
如果我将data: combinedOptions
更改为data: "{}"
并向我的ASPX添加其他方法(如下所示),则代码可以成功运行:
[WebMethod()]
public static string CreateEvent()
{
return null;
}
基本上,我的问题是:在提供JSON数据时,如何为WebMethod
指定可选参数?
我知道我可以将参数减少到所需的值,然后使用HttpContext.Request.Params
来读取可选参数的值,但我想我在这里尝试过的方法应该有效。
修改的
错误的XMLHttpRequest.responseText
值为:
无效的JSON原语:staffcode。
这让我更加摆脱了问题的气味:(
答案 0 :(得分:2)
没有“可选”参数这样的东西。传递未使用的参数的默认值。
答案 1 :(得分:1)
修正了它。有2个问题。
首先,我所有参数的情况都不正确(注意“activityCode”而不是“activitycode”)。
我现在也用这个:
data: JSON.stringify(combinedOptions)
真的很傻,但你有它。