عمليات الاسترجاعات لـ ASP.NET JavaScript بدون عمليات إعادة النشر الكاملة؟

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

  •  09-06-2019
  •  | 
  •  

سؤال

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

  • لا أحتاج إلى إجراء أي تحديثات DOM قبل عمليات الاسترجاعات أو بعدها أو أثناءها.
  • لا أحتاج إلى أي معلومات من الصفحة، فقط من ملف تعريف ارتباط الموقع الذي يجب إرساله دائمًا مع الطلبات على أي حال، وقيمة المعرف.

ما يثير فضولي لمعرفة ما إذا كان هناك أي طريقة نظيفة وبسيطة لإجراء رد اتصال JavaScript Ajax إلى صفحة ASP.NET دون إعادة نشر بقية المعلومات على الصفحة.أود ألا أضطر إلى القيام بذلك إذا كان ذلك ممكنًا.

أريد حقًا أن أتمكن من استدعاء طريقة واحدة على الصفحة، ولا شيء آخر.

أيضًا، أنا مقيد بـ ASP.NET 2.0 لذا لا يمكنني استخدام أي من ميزات إطار عمل 3.5 ASP AJAX الجديد، على الرغم من أنه يمكنني استخدام امتدادات ASP AJAX لإطار عمل 2.0.

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

ما رأيك في أفضل طريقة لنقل البيانات إلى IHttpHandler؟هل يجب علي إضافة متغيرات إلى سلسلة الاستعلام أو نشر البيانات التي أحتاج إلى إرسالها؟

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

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

المحلول

إذا كنت لا تريد إنشاء صفحة فارغة، فيمكنك استدعاء ملف IHttpHandler (ashx):

public class RSSHandler : IHttpHandler
    {
        public void ProcessRequest (HttpContext context)
        {   
            context.Response.ContentType = "text/xml";

            string sXml = BuildXMLString(); //not showing this function, 
            //but it creates the XML string
            context.Response.Write( sXml );
        }

        public bool IsReusable
        {
            get { return true; }
        }

    }

نصائح أخرى

يجب عليك استخدام عمليات الاسترجاعات ASP.Net التي تم تقديمها في Asp.Net 2.0.إليك مقالة يجب أن تجعلك مستعدًا للانطلاق:

تنفيذ عمليات الاسترجاعات من قبل العميل برمجياً دون عمليات الاسترجاعات في صفحات ويب ASP.NET

يحرر:انظر إلى هذا أيضًا:Icallback وJSON على أساس تسلسل جافا سكريبت

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

بالنظر إلى أن رد الاتصال مدفون في كود العميل، فقد يتطلب الأمر شخصًا لديه نفس القدر من التصميم للحصول على سلسلة الاستعلام أو طلب POST.أي، إذا كان لديهم Firebug، الخاص بك ثمل على قدم المساواة.

لذا، في هذه الحالة، افعل ما هو أسهل بالنسبة لك (تلميح:سأستخدم فقط سلسلة الاستعلام).

للتعامل مع الطلبات المتكررة/الوصول المباشر، أقوم بإنشاء مفتاح يتم إرساله مع كل طلب.ربما يكون هناك تجزئة للوقت الحالي (غامض، سأختصر الدقائق، ولكن ليس الثواني بسبب زمن وصول الشبكة) + عنوان IP الخاص بالعميل.

ثم في HTTPHandler، قم بإجراء نفس التجزئة، وقم بتشغيلها فقط إذا كانت متطابقة.

أنت لا تقتصر على ASP.NET AJAX فحسب، بل يمكنك استخدام أي مكتبة خارجية مثل jQuery وYUI وما إلى ذلك للقيام بنفس الشيء.يمكنك بعد ذلك فقط تقديم طلب إلى صفحة فارغة على موقعك والتي من المفترض أن تعرض الرؤوس التي تحتوي على ملفات تعريف الارتباط.

تصويتي مع اقتراح HTTPHandler أيضًا.أنا استخدم هذا في كثير من الأحيان.نظرًا لأنه لا يستدعي مثيلًا لفئة الصفحة، فهو خفيف الوزن جدًا.

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

ومن ثم، يعود أسلوبي النموذجي في XmlHttpRequest إلى HttpHandler.

نظرًا لأنك تستخدم ASP.NET 2.0 فقط، فإنني أوصي بذلك اياكس برو سوف يقوم بإنشاء ملف .ashx.كل ما عليك فعله هو سحب AjaxPro.dll إلى موقع الويب الخاص بك.لقد قمت بتطوير تطبيق كامل باستخدام اياكس برو ووجدت أنها تعمل بشكل جيد للغاية.يستخدم التسلسل لتمرير الكائنات ذهابًا وإيابًا.

وهذا مجرد نموذج لكيفية استخدامه ببساطة.

namespace MyDemo
{
  public class Default
  {
    protected void Page_Load(object sender, EventArgs e)
    {
      AjaxPro.Utility.RegisterTypeForAjax(typeof(Default));
    }

    [AjaxPro.AjaxMethod]
    public DateTime GetServerTime()
    {
      return DateTime.Now;
    }
  }
}

للاتصال به عبر JavaScript يكون الأمر بهذه البساطة

function getServerTime()
{
  MyDemo._Default.GetServerTime(getServerTime_callback);  // asynchronous call
}

// This method will be called after the method has been executed
// and the result has been sent to the client.

function getServerTime_callback(res)
{
  alert(res.value);
}

يحرر

عليك أيضا أن تضيف

إلى التكوين.يعمل AjaxPro أيضًا بشكل جيد جنبًا إلى جنب مع APS.NET Ajax ويمكنك تمرير كائنات C# من العميل إلى Sever إذا تم وضع علامة على الفئة على أنها [قابلة للتسلسل]

فقط لتقديم منظور مختلف، يمكنك أيضًا استخدام PageMethod على صفحتك الرئيسية.ديف وارد لديه وظيفة لطيفة ذلك يوضح هذا.بشكل أساسي، يمكنك استخدام jQuery ajax post لاستدعاء الطريقة، كما هو موضح في منشور Dave:

$.ajax({
    type: "POST",
    url: "Default.aspx/GetFeedburnerItems",
    // Pass the "Count" parameter, via JSON object.
    data: "{'Count':'7'}",
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    success: function(msg) {
      BuildTable(msg.d);
    }
  });

لا حاجة لملحقات Asp.Net Ajax على الإطلاق.

يمكنك أيضًا استخدام WebMethods المضمنة في مكتبة asp.net ajax.يمكنك ببساطة إنشاء طريقة ثابتة على الكود الخلفي للصفحة واستدعاء ذلك من جهاز Ajax الخاص بك.

هناك مثال أساسي جدًا لكيفية القيام بذلك هنا

يجب عليك استخدام خدمة ويب (.asmx).باستخدام ASP.NET AJAX من Microsoft، يمكنك أيضًا إنشاء بذرة البذور تلقائيًا.

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