كيف أقوم بتمرير معلمات اختيارية إلى webmethod عبر JSON؟
سؤال
لدي فئة 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 Call Fire بالطريقة التالية:
[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
لا يتم الاتصال به ، وأتلقى خطأً في أياكس (تعيين نقطة توقف لا يتوقف عن التنفيذ):
خطأ ، [Object XMLHTTPrequest
إذا تغيرت data: combinedOptions
ل data: "{}"
وأضف طريقة أخرى إلى ASPX (على النحو الوارد أدناه) يعمل الكود بنجاح:
[WebMethod()]
public static string CreateEvent()
{
return null;
}
في الأساس ، سؤالي هو: كيف يمكنني تحديد معلمات اختيارية إلى أ WebMethod
عند توفير بيانات JSON؟
أعلم أنه يمكنني تقليل المعلمات لأسفل إلى القيم المطلوبة فقط ، ثم استخدمها HttpContext.Request.Params
لقراءة قيم المعاملات الاختيارية ، لكنني كنت أفكر في الطريقة التي جربتها هنا كان ينبغي أن تنجح.
تعديل
ال XMLHttpRequest.responseText
قيمة الخطأ هي:
غير صالح JSON البدائي: رمز الموظفين.
هذا يرميني أكثر من رائحة المشكلة :(
المحلول 2
تم التصليح. كانت هناك مشاكل.
أولاً ، كانت حالة جميع المعلمات غير صحيحة (لاحظ "رمز النشاط" وليس "رمز النشاط").
وأنا أيضا استخدام هذا:
data: JSON.stringify(combinedOptions)
أخطاء سخيفة حقا ، ولكن هناك لديك.
نصائح أخرى
لا توجد أشياء مثل المعلمات "الاختيارية". تمرير الافتراضي للمعاملات غير المستخدمة.