كيف أقوم بتمرير معلمات اختيارية إلى webmethod عبر JSON؟

StackOverflow https://stackoverflow.com/questions/2267289

  •  20-09-2019
  •  | 
  •  

سؤال

لدي فئة 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)

أخطاء سخيفة حقا ، ولكن هناك لديك.

نصائح أخرى

لا توجد أشياء مثل المعلمات "الاختيارية". تمرير الافتراضي للمعاملات غير المستخدمة.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top