2

我打算使用以下 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: combinedOptionsdata: "{}"并向我的 ASPX 添加另一种方法(如下所示),则代码将成功运行:

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

基本上,我的问题是:如何WebMethod在提供 JSON 数据时为 a 指定可选参数?

我知道我可以将参数减少到只需要的值,然后HttpContext.Request.Params用来读取可选参数的值,但我认为我在这里尝试的方式应该有效。

编辑

XMLHttpRequest.responseText错误值为:

无效的 JSON 原语:staffcode。

这让我更加远离问题的气味:(

4

2 回答 2

2

没有“可选”参数之类的东西。为未使用的参数传递默认值。

于 2010-02-15T16:27:46.607 回答
1

修复。有2个问题。

首先,我所有参数的大小写都不正确(注意“activityCode”而不是“activitycode”)。

我现在也使用这个:

data: JSON.stringify(combinedOptions)

确实是愚蠢的错误,但你有它。

于 2010-02-15T17:04:16.667 回答