データベースで管理呼び出しを非同期的に実行するために使用する予定の次の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: combinedOptions
しdata: "{}"
て別のメソッドを追加すると(以下のように)、コードは正常に機能します。
[WebMethod()]
public static string CreateEvent()
{
return null;
}
WebMethod
基本的に、私の質問は、JSONデータを提供するときにオプションのパラメーターをに指定するにはどうすればよいですか?
パラメータを必要な値だけに減らしてからHttpContext.Request.Params
、オプションのパラメータの値を読み取るために使用できることはわかっていますが、ここで試した方法が機能するはずだと思いました。
編集
エラーのXMLHttpRequest.responseText
値は次のとおりです。
無効なJSONプリミティブ:staffcode。
これは私を問題の香りからさらに遠ざけています:(