سؤال

ليس بالتأكيد إذا كانت هذه هي الطريقة الصحيحة لعنوان السؤال. أعلم أنني أجعل Ajax يدعو كل شيء خاطئ ... إليك ما أفعله الآن (أنا أستخدم Backend ASP.NET MVC Backend بالمناسبة):

أنا أستعمل jQuery.ajax لنشر بعض البيانات إلى إجراء، مما سيقوم بتحميل عرض أنني التقاط في الاستجابة. إنه يوفر أساسا بعض البيانات إلى إجراء، وأخذ بعض HTML مرة أخرى.

دعنا نقول أنني أردت إنشاء مكالمة AJAX التي يتم التحقق منها. كيف يمكنني استعادة رسائل التحقق من الصحة عند الخطأ؟ على سبيل المثال، نموذج تسجيل الدخول AJAX. إذا تعذر التحقق من صحة المستخدم، أود أن أخبرهم أنه ... بدلا من مجرد عدم القيام بأي شيء.

آسف على السؤال الساذج، أنا فقط لا أعرف كيفية الكلمة الحق في العثور على الحلول على Google.

شكرا لكم مقدما!

هل كانت مفيدة؟

المحلول

بادئ ذي بدء، إذا كنت ترغب في دعوة AJAX لإرجاع البيانات التي تخطط للاستخدام في البرامج النصية الخاصة بك (واستخدامها، أعني شيئا أكثر تعقيدا، ثم عرض تلك البيانات في div)، ربما يجب عليك إرجاع بيانات JSON بدلا من HTML من الخادم الخاص بك. JSON هو في الواقع كائن JS حتى يمكن استخدامه في JS لحظة استلامه.

لذلك إذا قمت بإرجاع البيانات أي

{id: 1, status: 'ok'}

يمكنك استخدام شيء من هذا القبيل لاستخدام هذه البيانات.

$.ajax({
    url: "your/script/url",
    type: "POST",
    data: {login : 'foo', pass: 'bar'}, // whatever the data is
    dataType: "json",
    success: function(data){
        if (data.status === 'ok') {
            console.log('success');
        } else {
            console.log('error');
        }
    }

});

نصائح أخرى

ستحتاج إلى إرجاع قطع متعددة من المعلومات لردكم. لحسن الحظ، يمكنك القيام بذلك بسهولة باستخدام JSON، وسيقوم JQuery باستخدامه تلقائيا لك إذا أخبرته أن نوع الاستجابة هو JSON. سيتضمن الكائن الذي تحصل عليه في دالة اتصال AJAX الخاص بك على جميع البيانات التي تحتاجها كخصائص مختلفة.

أود أن أقترح على العادة المتمثلة في إعادة رمز حالة "النجاح" أو "الفشل" مع كل مكالمة AJAX، ومجموعة من الأخطاء معها. انظر هذا المدونة رهيبة وظيفة لمزيد من المعلومات حول ما أعنيه.

السبب في ذلك هو أن مكالمة AJAX ستقوم دائما بشكل أساسي "النجاح"، ما لم يكن الخادم لم يستطع بالفعل معالجة الطلب وعاد رمز حالة حالة HTTP. إذا كان نتيجة الطلب شيء مثل خطأ التحقق من الصحة، ولكن الخادم لا يزال بإرجاع نوع من استجابة النص، فإن مكالمة AJAX لا تزال تعتبر قد نجحت، على الرغم من فشل عملية التطبيق.

لذلك إذا، في طريقة العمل الخاصة بك، بدلا من إرجاع بيانات HTML الخاصة بك في نتيجة إجراء، إذا عدت كائنا مثل هذا:

public class AjaxResponse
    {
        /// <summary>
        /// Initializes a new instance of the <see cref="AjaxResponse"/> class.
        /// This creates an AjaxResponse that by default indicates SUCCESS.
        /// </summary>
        public AjaxResponse()
        {
            Success = true;
            Data = new List<object>();
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AjaxResponse"/> class.
        /// This creates an AjaxResponse that indicates FAILURE.
        /// </summary>
        /// <param name="exception">The exception.</param>
        public AjaxResponse(Exception exception)
            : this()
        {
            Success = false;
            Errors = new [] { exception.Message };
        }

        /// <summary>
        /// Initializes a new instance of the <see cref="AjaxResponse"/> class.
        /// This creates an AjaxResponse that indicates SUCCESS.
        /// </summary>
        /// <param name="data">The data.</param>
        public AjaxResponse(object data)
            : this()
        {
            Data = data;
        }

        /// <summary>
        /// Gets or sets a value indicating whether this <see cref="AjaxResponse"/> is success.
        /// </summary>
        /// <value><c>true</c> if success; otherwise, <c>false</c>.</value>
        public bool Success
        {
            get; set;
        }

        /// <summary>
        /// Gets or sets the data.
        /// </summary>
        /// <value>The data.</value>
        public object Data
        {
            get; set;
        }

        /// <summary>
        /// Gets or sets the errors.
        /// </summary>
        /// <value>The errors.</value>
        public string[] Errors
        {
            get; set;
        }
    }

سيترجم هذا إلى كائن JavaScript يحتوي على خصائص ".success" و ".DATA" و ".Errors".

لذا، إذا كان رمز التحقق من الصحة قد سكت مع صفيف الأخطاء مع كل أخطاء التحقق من الصحة، فسيكون من السهل على وظيفة رد الاتصال AJAX الخاص بك

  1. تحديد أن الغرض المقصود من المكالمة قد فشلت، لأن خاصية النجاح تم تعيين "الفشل".

  2. احصل على الكل سلاسل الخطأ ذات الصلة.

يمكنك القيام بذلك بسهولة مع هذا النوع من النمط في طرق عملك:

    try
    {
        instance.Validate();
        return Json(new AjaxResponse(myHtmlData));
    }
    catch(Exception ex)
    {
        var response = new AjaxResponse(ex);

        // Get your validation errors here, put them into
        // your ajax response's Errors property.

        return Json(response);
    }

لقد قمت المدون حول هذا الوضع نفسه. وبعد ربما سوف يساعدك في وضعك كذلك. إنه بشكل أساسي حول وجود فئة استثناء مخصصة وسامة عمل استثناء سيعود الخطأ. لذلك أنت قادر على استخدام success و error خيارات من $.ajax يتصل. وهو في رأيي الطريقة الصحيحة للقيام بذلك.

$.ajax توفر المكالمة وظيفة التعامل مع النجاح وكذلك ردود الخطأ. لا حاجة لإرجاع النجاح دائما مع مجموعة إشارة خطأ يجب عليك التحقق من العميل.

لست متأكدا مما إذا كنت أفهم تماما ما تعنيه. ولكن مثالك لرسالة التحقق من الصحة عند خطأ، لن يعمل هذا مثل ما يلي:

  1. ينقر المستخدم على زر / رابط ما يسبب إجراء
  2. يتم عودة مشاركة Asynchronouse إلى الخادم، وإرسال معرف المستخدم (يجب أن تكون على دراية بالأمان هنا)
  3. على الخادم يتم التحقق من الصحة الضروري ورد إرسال مرة أخرى (في XML، JSON، مباشرة الرسالة المشفرة ك HTML)
  4. مرة أخرى على جانب العميل، تحصل على ردك في رمز JavaScript الخاص بك ووضعه بشكل مناسب على الصفحة

امل ان يساعد.

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