Wie gehe ich optionale Parameter in eine WebMethod über JSON?
Frage
Ich habe die folgenden JSON-Klasse-I beabsichtigen ist zu verwenden Managements Anrufe auf meiner Datenbank auszuführen asynchron:
<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>
Ich benutze es dann in meiner Seite wie folgt:
<script type="text/javascript">
CalendarManager.createEvent(); // random test
</script>
Im Moment versuche ich, diese AJAX-Aufruf zu erhalten Feuer der folgende Methode:
[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;
}
Leider ist die Methode CreateEvent
nicht genannt zu werden, und ich einen AJAX-Fehler erhalten (einen Haltepunkt Einstellung nicht zu stoppen Ausführung):
Fehler [Objekt XMLHttpRequest]
Wenn ich Änderung data: combinedOptions
zu data: "{}"
und eine andere Methode zu meinem ASPX hinzufügen (wie unten) der Code funktioniert erfolgreich:
[WebMethod()]
public static string CreateEvent()
{
return null;
}
Im Grunde ist meine Frage: wie ich optionale Parameter zu einem WebMethod
angeben, wenn JSON-Daten bereitstellt
Ich weiß, ich kann die Parameter reduzieren auf nur die erforderlichen Werte, und dann HttpContext.Request.Params
verwenden, um die Werte der optionalen Paramater zu lesen, aber ich würde die Art und Weise habe ich versucht, hier sollte gearbeitet haben gedacht haben.
EDIT
Der XMLHttpRequest.responseText
Wert für den Fehler ist:
Ungültige JSON primitiv. Staffcode
Das ist mir noch mehr von der Fährte des Problems zu werfen: (
Lösung 2
es behoben. Es gab 2 Probleme.
Als erstes wird der Fall aller meiner Parameter falsch war (Anmerkung „activityCode“ nicht „activitycode“).
Und ich jetzt auch verwenden:
data: JSON.stringify(combinedOptions)
Dumme Fehler wirklich, aber dort haben Sie es.
Andere Tipps
Es gibt keine solche Dinge wie ‚optional‘ Parameter. Übergeben Sie einen Standardwert für nicht verwendete params.