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]

ASPXに変更data: combinedOptionsdata: "{}"て別のメソッドを追加すると(以下のように)、コードは正常に機能します。

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

WebMethod基本的に、私の質問は、JSONデータを提供するときにオプションのパラメーターをに指定するにはどうすればよいですか?

パラメータを必要な値だけに減らしてから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 に答える