بادئ ذي بدء ، دعونا نلقي نظرة على عملية تنفيذ صفحة ASP
1. IIS يجد ملف ASP وقم بإرساله إلى معالجة ASP Engine (عادةً ASP.DLL).
2. يفتح المحرك ملف ASP ويجد المحتوى بين <٪ و ٪>. يتم تحليل المحتوى فقط في كتلة البرنامج النصي بواسطة المحرك ، ويتم إدراج المحتوى الآخر بين كتل البرنامج النصي كأحرف لا معنى له. من الضروري أن نوضح أنه في الواقع ، فإن محتوى التحليل أكثر من ذلك. إذا قرأت الكثير من البرامج ، فستعلم أيضًا أن بعض سمات Runat يتم تمييزها ككائن <bounter> الخادم.
3. يتم تنفيذ البرنامج النصي في كتلة البرنامج النصي.
<٪
خافت أنا
لأني = 1 إلى 5
٪> مرحبا العالم!
<٪ next ٪>
لا يقوم المحرك بتحليل كتل البرنامج النصي هذه بشكل منفصل ، ولكنه يرتكب أخطاء بناء الجملة في كتل كتل البرنامج النصي. لذلك نحصل على الاستنتاجات التالية: لن يتم إرسال جميع البرامج النصية غير المتقدمة إلى العميل. يجب ألا يقلق الخادم بشأن تنفيذ برنامج نصي العميل ، ولكن يمكنك إخراج البرامج النصية للعميل المختلفة من خلال البرنامج النصي للخادم.
4. يقوم المحرك النهائي بإنشاء تدفق نص ، أو نتيجة تنفيذ البرنامج النصي. يتم عرض متصفح العميل على الصفحة في هذا الوقت ، لا يتضمن الكود المصدر (الملف) للصفحة البرنامج النصي للخادم ، ولكنه يحتوي على نتيجة تنفيذ البرنامج النصي للخادم (هذا واضح).
<٪ ... ٪> و <script runat = server> ... </script>
هم البرامج النصية على الجانب الآخر ويتم معالجتها وتنفيذها في نفس الوقت. عندما ينفذون ، كانوا ككل.
<٪ ... ٪> و <لغة البرنامج النصي = ...> ... </script>
السابق هو البرنامج النصي الخادم ، وهذا الأخير هو البرنامج النصي العميل. يتم تنفيذ الأول أولاً ، ويتم تنفيذ الأخير.
في الواقع ، قد يتم تنفيذ البرنامج النصي في نفس الوقت ، لكن المساحة مختلفة. يجب تنفيذ السابق بشكل منطقي مسبقًا. في الوقت نفسه ، لدينا أيضًا استنتاج: في تنفيذ نفس الصفحة ، لا يمكن إعادة برنامج البرنامج النصي للعميل إلى البرنامج النصي الخادم على أي حال ، أي أن العميل تصفح دفتر الرسائل الخاص بك وإرسال رسالة جديدة أو أي برنامج نصي عميل قيمة الاستحواذ من المستحيل معالجتها في نفس استجابة الخادم.
دعوة للمكونات
لاحظ أن البرامج النصية للخادم والبرامج النصية للعميل هي البرنامج النصي.
إذا تم استخدام XMLHTTP لصفحة الويب الخاصة بالخادم (مثل التجميع) ، فسيتم إنشاؤه في البرنامج النصي للخادم. العميل.
يتم استخدام مكون ADODB.Connection للوصول إلى قاعدة البيانات. بلا شك هو أنه على العميل على العميل الذي تم إنشاؤه في البرنامج النصي النهائي.
باختصار ، أشياء متناقضة وكل جانب له خصائصه الخاصة. أشياء مختلفة لها تناقضات مختلفة ؛ افهم لا تنظر ...). يتطلب هذا المبدأ الالتزام بمبادئ التحليل المحددة لقضايا محددة. معارضة استخدام طريقة واحدة لحل تناقضات الأشياء المختلفة. يتم فتح مفتاح ، أي نوع من الجبل يغني ونوع الأغنية هو الحقيقة.
يستخدم كائن إنشاء Server -Side VBScript Server.CreateBject (className).
خطأ نموذجي
<٪
وظيفة tsize (ب)
هذه وظيفتي المخصصة
tsize = الصين
وظيفة نهاية
٪>
<a href = javaScript: <٪ tsize ('متغير') ٪ >> انقر هنا لاستخدام وظيفة التعريف الخاصة بي </a>
تحليل الخطأ:
إنه يربك الفرق بين البرنامج النصي للخادم ونصي العميل. أثناء التنفيذ الفعلي ، سنجد أن العميل لا يتلقى أي رمز مثل tsize ، لأن tsize هو برنامج على الخادم ، وبعد معالجة المحرك (لاحظ أن معالجة المحرك للوظيفة تسمى بحتة للخادم البرنامج النصي ، لن يكون اختفى ، وكان من المستحيل لعب دور على العميل. وهذا يعني أن برنامج نصي العميل لا يمكنه استدعاء وظيفة البرنامج النصي بجانب الخادم مباشرة.
في الواقع ، هذا البرنامج خاطئ في القواعد النحوية. حسنًا ، التغيير إلى <٪ = tsize (متغير) ٪> لا يوجد خطأ في النصي في الخادم. : JavaScript: الصين ، الصين ، لا يمكن تنفيذها.
تأثير البرنامج النصي للخادم على البرنامج النصي العميل
كما ذكرنا سابقًا ، يتم تنفيذ برنامج نصي الخادم منطقيًا في البرنامج النصي العميل مقدمًا ، لذلك فإن مثل هذا الرمز ممكن:
<٪
خافت أنا
لأني = 1 إلى 5
استجابة. write <script type = text/javaScript> _
& Alert ('Hello World! & i &') </script>
التالي
٪>
حول تنفيذ الاستجابة.
لاحظ أن كتابة الكود التالي خاطئ:
<٪
استجابة. index.asp
استجابة. write <script type = text/javaScript> _
& ALERT ('خطأ كلمة المرور!) </script>
٪>
هذا خطأ شائع.
يرتبط السبب بالتعامل مع سطرين من الكود. لا يمكن لخطين من الكود العمل في نفس الوقت.
Response.write هو نص للعميل.
يرسل Response.redirect معلومات رأس HTTP إلى العميل (ما هي معلومات رأس HTTP؟ لذلك ، على سبيل المثال ، فإن كتابة ملفات تعريف الارتباط العميل هي معلومات رأس HTTP. متصفح ، ولهذا السبب في بعض الأحيان نقوم بتعديل كابل الخادم و قم بتعديل ملفات تعريف الارتباط الخاطئة ، لأن الموضوع قد تم إرساله ، ولا يُسمح له بإرسال معلومات رأس HTTP. بغض النظر عن عدد المحتويات التي تمت كتابتها في المخزن المؤقت ، بمجرد استجابة الاستجابة. سيتم استدعاؤه وسيتم استدعاؤه. إذا قمت بتتبع تنفيذ البرنامج ديناميكيًا ، فسنجد أيضًا أنه بعد استدعاء Response.redirect ، يتوقف البرنامج عن التنفيذ ، لذلك انتبه إلى برنامج Server -Side قبل استدعاء Response.redirect.
فكيف ينبغي تعديل المثال أعلاه؟ إذا كنت لا ترغب في تعديل الفهرس
<٪
استجابة. write <script type = text/javaScript> _
& Alert ('!') ؛
٪>