[ملاحظة: هذه الفقرة لا علاقة لها بمحتوى العنوان ويمكن تخطيها] بعد مشاهدة حلقتين من Stargate والاستحمام، قررت أخيرًا البدء في كتابة هذا المقال. هذه هي مقالتي التقنية الأولى حقًا، وبغض النظر عن المحتوى الفني، فقد اتخذت هذه الخطوة أخيرًا. في الواقع، لقد فتحت العديد من المدونات، بدءًا من أقدم حافلة جامعية، وحتى Blog Park، ومدونة Sina الخاصة بي للشكوى. في الواقع، كان الغرض الأصلي من إنشاء مدونة هو تسجيل عملية التعلم الخاصة بي أثناء كتابة البرامج. ولكن تطور الأمر فيما بعد إلى شيء يستخدم للشكوى، ويمكن اعتبار ذلك نتيجة لعدم قدرتي على التركيز في الدراسة. ومع ذلك، كما يقول المثل، لم يفت الأوان لإصلاح المشكلة، بدءًا من هذا المقال أكثر تركيزا وأكثر تركيزا. مسترشدًا بهذه الفكرة المركزة، بدأت أخيرًا في كتابة البرامج بشكل صحيح مرة أخرى مؤخرًا، وهذه المرة تركت الأشياء التي لم أرغب في القيام بها، وركزت على كتابة كود C# الذي أحبه المفضلة هي C# وJavascript. والأخيرة هي لغة برمجة نصية، على وجه الدقة، لقد وقعت في حبها مؤخرًا فقط، اعتقدت أنها كانت تمامًا مثل Basic التي لعبت بها عندما كنت طفلاً، صغيرة وبسيطة، لكنها تحولت يبدو أن الأمر ليس كذلك، على الرغم من أنها أيضًا لغة برمجة نصية مثل VBS، إلا أن هناك في الواقع المزيد من المحتوى المخفي تحت مظهر لغة C. والآن دعنا نصل إلى هذه النقطة تعجبني منصة .NET، ولا أعرف لماذا عندما استخدمت لغة C# لأول مرة لكتابة التعليمات البرمجية في عام 2001، اعتقدت أنها جميلة جدًا، ثم وقعت في حبها بسبب المشاكل البيئية في ذلك الوقت، تمت مقاطعته لفترة حتى عام 2004. التقطته مرة أخرى، ولكن لأكثر من عام، كنت أقوم فقط بسحب أكوام من عناصر التحكم، ثم تعديلها في لوحة الخصائص بدا الويب في الأصل، ثم أخيرًا هناك شيء غير ذكرياتي ---- Ajax.
أطر عمل تطوير Ajax موجودة في كل مكان. في الواقع، عندما تم إصدار ASP.NET 2.0، تم دمج بعض المحتوى المشابه داخليًا، ويتم استخدامه في بعض عناصر التحكم في البيانات مثل GridView "ASP.NET" (النسخة الصينية | الإنجليزية) جعلني أدرك سحر المكالمات غير المتزامنة في asp.net (تقتصر طريقة التنفيذ على الإصدار beta1، فيما يتعلق بجزء رد الاتصال النصي beta1 وbeta2 والإصدار الرسمي، فهي مختلفة عن الزمن يمكن للمهتمين الرجوع إلى محتوى MSDN الذي تم إصداره مؤخرًا بأنفسهم)، لكنني لعبت به للتو في ذلك الوقت، واستخدمت Atlas، لذلك لم أهتم به كثيرًا ناقشت ASP معي منذ بعض الوقت عند تنفيذ ajax في .net، ذكرت أن تنفيذ atlas مرهق للغاية، وما يريد تنفيذه هو فقط عدد قليل من المحتويات الصغيرة جدًا التي لا تحتاج إلى أن تكون مزعجة إلى هذا الحد أنا لست على دراية بإطار عمل ajax الخاص بـ .NET بخلاف ذلك، ومن الطبيعي أن أتذكر آلية رد الاتصال للبرنامج النصي المضمنة. باستخدام مشروع أحد الأصدقاء (بموافقته الخاصة)، كتبنا الكثير من التعليمات البرمجية حول هذا الموضوع بعد كتابته فجأة اكتشفت مشكلة، وهي أن الكود كان فوضويًا للغاية. كل صفحة متشابهة، ويمكن تمرير معلمة سلسلة واحدة فقط، بالإضافة إلى التفاعل، يتعين علينا استخدام الإطارات المضمنة لعرض بعض البيانات باهظة الثمن. قبل يومين ذهبت إلى Haitu واشتريت كتابًا بعنوان "Ajax Advanced Language Programming". بعد قراءة جزء منه، أردت فجأة أن أفهم كيفية تنفيذ رد الاتصال بالبرنامج النصي في asp.net 2.0؟ في الواقع، إذا نظرنا إلى الوراء الآن، فقد تم شرح العديد من الأماكن في المقالة "Custom Script Callback in ASP.NET" بشكل واضح للغاية، ويمكن القول أنه في ذلك الوقت، كانت هناك أشياء كثيرة في السحاب، ولا يمكن للمستفيدين سوى رؤية التأثير سأقوم بنشر ما أعتقد أنه أبسط تنفيذ أولاً، ثم تحليله.
قم بإنشاء صفحة Default.aspx جديدة، وأضف عنصر تحكم CheckBox على الصفحة، ثم افتح الملف Default.aspx.cs تضيف الفئة _Default ثلاث واجهات موروثة، ICallbackContainer، وICallbackEventHandler، وINamingContainer:
[Code 1]
#region ICallbackContainer member.
سلسلة عامة GetCallbackScript (IButtonControl ButtonControl، وسيطة السلسلة)
{
رمي استثناء جديد("لم يتم تنفيذ الطريقة أو العملية.");
}
#endregion
#region أعضاء ICallbackEventHandler
سلسلة مؤقتة؛
سلسلة عامة GetCallbackResult()
{
// طرح استثناء جديد ("خطأ في العينة")؛
درجة حرارة العودة؛
}
RaiseCallbackEvent باطلة عامة (سلسلة أحداث)
{
temp = "______" + EventArgument + " نجح.______";
}
#endregion
انتقل إلى أسلوب Page_Load الخاص بصفحة Default.aspx.cs وأضف التعليمة البرمجية التالية:
[الرمز 2]
Page_Load باطلة محمية (مرسل الكائن، EventArgs e)
{
string temp = Page.ClientScript.GetCallbackEventReference(this, "arg", "Callback", "context", "OnError", true);
string script = "function CallServer(arg,context){" + temp + "}";
Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "abc", script, true);
CheckBox1.Attributes.Add("onclick", "CallServer('أتصل بالخادم','context');");
}
بعد تحرير تعليمات CS البرمجية، افتح الملف Default.aspx وأضف التعليمة البرمجية التالية بين <head>...</head>:
[الرمز 3]
<نوع البرنامج النصي = "نص/جافا سكريبت">
وظيفة OnError (خطأ، السياق)
{
تنبيه (خطأ)؛
}
وظيفة رد الاتصال (الوسيطة، السياق)
{
تنبيه (أرج)؛
}
</script>
يمكن سحب عنصر التحكم CheckBox هنا بشكل عرضي ويمكن تغييره إذا لزم الأمر، ومع ذلك، قد ترغب في الانتباه عند استخدام عنصر التحكم Button، حيث سيقوم بتنشيط حدث OnSubmit بشكل افتراضي، لذلك قد تحتاج إلى إعداده أو استخدام السيطرة على HTML مباشرة. يمكن اعتبار الكود أعلاه بمثابة تطبيق بسيط لرد اتصال البرنامج النصي، وكلها ضرورية.
يجب أن تقوم عناصر التحكم التي تستخدم عمليات الاسترجاعات الأساسية بتنفيذ ثلاث واجهات: ICallbackContainer، وINamingContainer، وICallbackEventHandler. في الواقع، لا يحتوي INamingContainer على محتوى واجهة يحتاج إلى التنفيذ، فهو فقط "يحدد عنصر تحكم الحاوية الذي ينشئ مساحة اسم معرف جديدة ضمن التسلسل الهرمي للتحكم لكائن الصفحة" (مقتبس من MSDN). بالنسبة لواجهة ICallbackContainer، فإن الشرح المقدم في MSDN (الإصدار الصيني) غامض نسبيًا، كما تقدم بعض المقالات ذات الصلة عمليات رد الاتصال النصية وواجهات ICallbackEventHandler، لأننا نستخدم الصفحات كأساس لعمليات الاسترجاعات هنا يتم تنفيذه بواسطة الواجهة وهي GetCallbackScript، ولكن إذا كنت تقوم بتغليف عنصر تحكم Ajax الخاص بك، فهذه الطريقة مفيدة جدًا هنا، نستخدم فقط الطريقة التي ينفذها ICallbackEventHandler لمعالجة البيانات، لأنه في طريقة Page_Load قمت بتسجيل طريقة CallServer، ثم يتم تشغيله عند حدث OnClick المرفق بـ CheckBox، حتى نتمكن من فهم عملية الاتصال بشكل أكثر وضوحًا.
لاحقًا [الرمز 3] قمت بتطبيق طريقتين لـ Javascript، إحداهما تستخدم لمعالجة أخطاء الاتصال، والأخرى تستخدم لمعالجة معلومات الإرجاع بعد نجاح المكالمة. في [الكود 1]، يوجد جزء من التعليمات البرمجية يطرح استثناءً قمت بالتعليق عليه، ومن خلال هذا الرمز، يمكنني محاكاة استدعاء طريقة OnError.
حتى هنا رأينا كيفية تنفيذ هذه الدعوة بصراحة، إنها في الواقع طريقة متقدمة نسبيًا لسحب عناصر التحكم، ولكن كيف يتم تنفيذها؟ لماذا لا أرى أي شيء بخصوص XmlHttpRequest؟ (أعتقد اعتقادًا راسخًا أن هذه هي أفضل طريقة لتطبيق Ajax، لأنه يمكن استخدام هذا الرمز في أي متصفح يدعم Javascript. وأعتقد أنه لا علاقة له بالباب السري)
تجميع، تشغيل......
سيؤدي النقر فوق مربع الاختيار الموجود في الصفحة قيد التشغيل إلى عرض "___ لقد نجح الاتصال بالخادم. ___". كيف يتم تنفيذ هذا؟ في الواقع، ما عليك سوى النقر فوق "عرض كود المصدر" في هذه الصفحة. هناك سر صغير مخفي هنا. يتم إنشاء ثلاث كتل نصية تلقائيًا على الصفحة. واحدة هي __doPostback، والتي تُستخدم للتعامل مع إعادة النشر لحدث التحكم في الخادم هي طريقة CallSerer التي قمنا بتسجيلها للتو باستخدام ClientScript، وهناك أيضًا علامة ارتباط لبرنامج نصي خارجي، وهذا هو المفتاح الذي يتصل به.
<script src="/TechTest/WebResource.axd?d=DE9YrizlDDq8OUlo_3rQgA2&t=632919546726295408" type="text/javascript"></script>
افتح العنوان وفقًا للعنوان المشار إليه بواسطة SRC أعلاه، ويمكنك الحصول على ملف WebResource.axd (املأ عنوان الاتصال في أداة التنزيل مثل Thunder ويمكنك تنزيله. عند فتحه، يمكنك أن ترى أن هذا الملف يحتوي بالفعل على بعض أكواد Javascript:
حاول
).
{
xmlRequest = new XMLHttpRequest();
}
قبض (ه)
{
يحاول
{
xmlRequest = new ActiveXObject("Microsoft.XMLHTTP");
}
قبض (ه)
{
}
}
يبدو الرمز مألوفًا جدًا!
إذا (!useAsync)
{
إذا (__synchronousCallBackIndex != -1)
{
__pendingCallbacks[__synchronousCallBackIndex] = null;
}
__synchronousCallBackIndex = callbackIndex;
}
داخل هذا؟ أليس هذا هو ما يعالج خيار الاتصال غير المتزامن في أسلوب Page.ClientScript.GetCallbackEventReference؟
هناك الكثير من الرموز المفيدة التي أقوم بالبحث فيها ..........................
هناك العديد من الطرق بالإضافة إلى ذلك بصراحة، إنه Ajax بسيط جدًا. يتضمن تغليف إطار العمل معالجة أحداث التحكم ومعالجة طلبات إعادة النشر على هذا الأساس، بحيث يمكن تغليفها مباشرة في عنصر تحكم .NET Ajax بسيط. NET أثناء التطوير.
في الواقع، تعد تقنية Java أو .NET أو PHP كلها عبارة عن تغليف متقدم لـ HTTP من جانب الخادم، تمامًا مثل تقنية CGI التي استخدمناها منذ وقت طويل، والآن أصبحت تقنية الويب أكثر تقدمًا وفهمًا عندما يتعلق الأمر آلية التشغيل الداخلية لـ .NET، يمكننا التخلص من بعض القيود وإعادة كتابة بعض الصفحات أو التحكم بأنفسنا لبناء بيئة تطوير Ajax الخاصة بنا.
كنت مهندس تحكم، وأعتقد أن التغليف هو تقنية ضرورية في عصر المصانع الكبيرة، ومع ذلك، لا يزال المبرمجون بحاجة إلى التعمق أكثر وفهم المحتوى الكامن وراء تشغيل البرنامج بشكل أفضل حتى يتمكنوا من تطوير جودة عالية بشكل أفضل. برنامج.