موصى به: كيفية تنسيق تراجع ASP والتاريخ لتنسيق RFC822 احسب الصفحة ، Hehe ، لا يتعين عليك الحكم على المحتوى المرجع التالي: intnumpage = abs (int (-(intnumrecord/intperpage))) تنسيق التاريخ
إذا كانت غرفة الكمبيوتر على وشك الإغلاق ، أو إذا كنت في عجلة من أمرك حتى الآن ، فيرجى القفز مباشرة إلى الفقرة الرابعة.
تتضمن البرامج النصية الموضحة أدناه البرامج النصية من جانب الخادم والبرامج النصية من جانب العميل. تشير البرامج النصية من جانب الخادم إلى جزء البرامج النصية التي تعمل على الخادم. على سبيل المثال ، من الواضح أن الاستجابة الشائعة. يتم تشغيل write على الخادم. يمكن كتابة البرامج النصية من جانب الخادم بلغات VBScript و JScript. في هذه المقالة ، يتم استخدام vbscript ، JScript هو نفس المبدأ.
يمكن اعتبار البرامج النصية للعميل أيضًا لتشمل لغتين: VBScript و JavaScript ، وهي لغات البرمجة النصية التي تعمل على متصفحات العميل. على سبيل المثال ، عندما نقوم بزيارة صفحة ويب ، ينبثق مربع الرسائل ، والذي يتم القيام به باستخدام البرامج النصية للعميل (ALERT ، MSGBOX ، إلخ) ، ومن الواضح أنه ليس شيئًا يمكن أن تفعله البرامج النصية من جانب الخادم. هناك فرق كبير بين البرامج النصية للعميل ونصوص الخادم (في المتصفحات مثل IE و Firefox) ، أي يمكن للنصوص العميل الوصول إلى نموذج كائن المستند (DOM) وتشغيل الكائنات في الصفحة (مثل تعديل عنوان الصفحة ، وتعديل سمة InnerHTML من DIV ، إلخ).
أولاً ، دعونا نفهم عملية تنفيذ صفحة ASP
1. IIS يجد ملف ASP ويقدمه إلى محرك ASP (عادةً ASP.DLL) للمعالجة.
2. يفتح المحرك ملف ASP هذا ويجد المحتوى بين <٪ و ٪> ، وبالطبع المحتوى بين <script runat = server> و refricted </script>. وتسمى هذه المحتويات كتل البرنامج النصي. يتم تحليل المحتوى في كتلة البرنامج النصي فقط بواسطة المحرك ، ويتم تجاهل المحتوى الآخر ، ويتم إدراجه بين كتل البرنامج النصي كأحرف لا معنى له. من الضروري توضيح أنه في الواقع ، هناك أكثر من تحليل هذا المحتوى. تضمنت جانب الخادم ملفات الفئة <!-#تضمين ***-> معالجتها ومعالجتها بواسطة المحرك. إذا قرأت المزيد من البرامج ، فستعلم أيضًا أن بعض الكائنات <Object> تحمل علامة خادم مع سمة Runat ستتم معالجتها أيضًا ، لذلك لن أناقشها بتعمق هنا.
3. يقوم المحرك بتنفيذ البرامج النصية في كتلة البرنامج النصي. يتم تنفيذ البرامج النصية من جانب الخادم هذه ككل ، أي أن الكود التالي يمكن كتابة:
| ما يلي هو المحتوى المقتبس: <٪ خافت أنا لأني = 1 إلى 5 ٪> مرحبا العالم! <٪ التالي ٪> |
لا يقوم المحرك بتحليل كتل البرنامج النصي هذه بشكل منفصل ، مما تسبب في حدوث أخطاء بناء الجملة في كلا كتل البرنامج النصي. لذلك توصلنا إلى الاستنتاج التالي: لن يتم إرسال كل رمز البرنامج النصي غير الخادم إلى العميل ، ومن الممكن أن يتم تقييد رمز النص الخادم هذا بواسطة كتلة البرنامج النصي. بالتأكيد لن يقلق الخادم بشأن تنفيذ البرامج النصية للعميل ، ولكن يمكن إخراج البرامج النصية المختلفة للعميل من خلال البرامج النصية للخادم.
4. في النهاية ، يقوم المحرك بإنشاء دفق نص ، أو نتيجة تنفيذ البرنامج النصي ، والذي يمكن اعتباره سلسلة ، وهي الرمز المرسلة إلى صفحة الويب لمتصفح العميل. يعرض متصفح العميل الصفحة. في هذا الوقت ، لا يحتوي الكود المصدر (الملف المصدر) للصفحة على برامج نصية من جانب الخادم ، ولكنها تحتوي على نتيجة تنفيذ البرامج النصية من جانب الخادم (هذا واضح).
<٪ ... ٪> و <script runat = server> ... </script>
كلها نصوص من جانب الخادم التي تتم معالجتها وتنفيذها في نفس الوقت. يتم تنفيذها ككل.
<٪ ... ٪> و <لغة البرنامج النصي = ...> ... </script>
السابق هو برنامج نصي من جانب الخادم ، والأخير هو نص من جانب العميل. يتم تنفيذ الأول أولاً ، ويتم تنفيذ الأخير لاحقًا.
في الواقع ، هذا ليس صحيحا تماما. قد يتم تنفيذ البرامج النصية للاثنين في نفس الوقت ، ولكن المساحة مختلفة ، وما زالت: يتم تنفيذ الأول على الخادم ، ويتم تنفيذ الأخير في متصفح العميل. يجب تنفيذ الأول بشكل منطقي من قبل الأخير. في الوقت نفسه ، خلصنا أيضًا إلى أنه أثناء تنفيذ نفس الصفحة ، لا يمكن إعادة برنامج البرنامج النصي للعميل مرة أخرى إلى البرنامج النصي للخادم بأي شكل من الأشكال. أي أن العميل يتصفح دفتر الرسائل الخاص بك ويقدم رسالة جديدة ، أو لا يمكن معالجة القيمة التي تم الحصول عليها بواسطة أي برنامج نصي عميل في نفس استجابة الخادم.
حول مكالمة المكون
لاحظ أن البرامج النصية من جانب الخادم والبرامج النصية من جانب العميل هي نصوص ، بحيث يمكنك إنشاء مكونات XMLHTTP بشكل طبيعي ، ومكونات ADODB.Connection ، وما إلى ذلك ، ولكن ليس في أي مكان.
إذا تم استخدام XMLHTTP لزحف صفحات الويب (مثل المجموعة) على الخادم ، فيجب إنشاؤه في البرنامج النصي للخادم. إذا تم استخدامه لـ AJAX للعميل والتوصيل الخلفي للصفحات الموجودة على الخادم دون تحديث ، فسيتم تشغيله على العميل ويتم إنشاؤه بشكل طبيعي على العميل.
يتم استخدام مكون ADODB.Connection للوصول إلى قاعدة البيانات. بشكل عام ، يتم إنشاؤه على جانب الخادم. بعد كل شيء ، يقوم برنامج ASP من جانب الخادم بتشغيل بيانات قاعدة البيانات. ومع ذلك ، إذا كانت قاعدة البيانات الخاصة بك متصلة حقًا بالعميل (مثل http://bbs.bccn.net/thread-224966-1-2.html) ، فإنه يتم إنشاؤه بلا شك في نص العميل.
باختصار ، الأشياء المتناقضة وجوانبها لها خصائصها الخاصة. أشياء مختلفة لها تناقضات مختلفة. نفس الشيء له تناقضات مختلفة في عمليات ومراحل مختلفة من التطوير ؛ التناقضات المختلفة في نفس الشيء والجانبان المختلفين من نفس التناقض لها خصائصها الخاصة (إذا كنت لا تستطيع فهمها ، فيمكنك تجاهلها ...). هذا المبدأ يتطلب منا الالتزام بمبدأ تحليل محدد لمشاكل محددة ، وتحت توجيه مبدأ عالمية التناقضات ، يجب أن نحلل خصوصية التناقضات على وجه التحديد ، وإيجاد الطريقة الصحيحة لحلها. يعارض اعتماد نفس الحجم لطريقة واحدة لحل التناقضات بين الأشياء المختلفة. هذا ما تقوله عندما تفتح مفتاحًا وتغني أغنية عندما تذهب إلى الجبل.
يستخدم برنامج VBSCript Script Server.CreateObject (className) لإنشاء كائنات ، ويستخدم البرنامج النصي من جانب العميل VBSCript طريقة CreateObject (className) لإنشاء كائنات.
خطأ نموذجي
| ما يلي هو المحتوى المقتبس: <٪ وظيفة tsize (ب) هذه وظيفتي المخصصة tsize = الصين وظيفة نهاية ٪> <a href = javaScript: <٪ tsize ('variable) ٪>> انقر هنا لاستخدام الدالة التي حددتها </a> (http://bbs.bccn.net/thread-225244-1-1.html) |
تحليل الخطأ:
يربك الفرق بين البرامج النصية من جانب الخادم والبرامج النصية من جانب العميل. عند التنفيذ بالفعل ، سنجد أن العميل لا يتلقى أي رمز مثل tsize على الإطلاق ، لأن tsize هو برنامج من جانب الخادم. بعد معالجته بواسطة المحرك (لاحظ أن معالجة المحرك للوظائف تسمى بحتة من قبل البرنامج النصي من جانب الخادم ولن يتم إرسالها إلى العميل) وستختفي ولا يمكن أن تعمل على العميل. هذا يعني أن البرامج النصية للعميل لا يمكنها استدعاء وظائف البرامج النصية من جانب الخادم مباشرة.
في الواقع ، يحتوي هذا البرنامج على أخطاء في بناء الجملة. عندما يعالج المحرك هذا المحتوى ، يجد أولاً المحتوى بين <٪ و ٪> ، أي <٪ tsize ('variable') ٪>. من الواضح أن هذا المحتوى لا يتوافق مع قواعد بناء الجملة لـ VBScript. حسنًا ، تغييره إلى <٪ = tsize (متغير) ٪> لا يوجد خطأ في بناء الجملة في البرنامج النصي من جانب الخادم. في هذا الوقت ، يمكن أن تُرجع وظيفة tsize القيمة إلى الصين بشكل طبيعي ، وبالتالي فإن سمة HREF التي يتلقاها العميل مكتوبة مثل هذا: JavaScript: China ، لا يمكن تنفيذها.
تأثير البرامج النصية من جانب الخادم على البرامج النصية من جانب العميل
كما ذكرنا سابقًا ، يتم تنفيذ البرامج النصية من جانب الخادم بشكل منطقي قبل البرامج النصية من جانب العميل ، لذلك هذا الرمز ممكن:
| ما يلي هو المحتوى المقتبس: <٪ خافت أنا لأني = 1 إلى 5 استجابة. write <script type = text/javaScript> _ & Alert ('Hello World! & i &') </script> التالي ٪> فيما يتعلق بتنفيذ الاستجابة. لاحظ أن الكود التالي مكتوب بشكل غير صحيح: <٪ استجابة. index.asp استجابة. write <script type = text/javaScript> _ & ALERT ('خطأ كلمة المرور!') </script> ٪> |
هذا خطأ شائع. غالبًا ما يعتقد الكتاب أن كتابة التعليمات البرمجية بهذه الطريقة يمكن أن تجعل العميل يطفو على تشغيل موجه خطأ في كلمة المرور ثم يتحولون إلى index.asp. في الواقع ، هذا لا يمكن أن يحدث. حتى إذا تم تبادل سطرين من الكود بالتسلسل ، فمن المستحيل تحقيق هذا التأثير.
يرتبط السبب بالطريقة التي يتعامل بها الخادم مع سطرين من التعليمات البرمجية. لا يمكن أن يعمل هذان السطران من الكود في نفس الوقت.
استجابة. يرسل Write قطعة نص إلى العميل. يمكن أن يكون محتوى هذا النص نصًا. يمكن لمتصفح العميل تنفيذ هذا البرنامج النصي بعد استلامه. لاحظ أنه لا يمكن تنفيذها إلا بعد استلامها.
Response.Redirect يرسل رأس HTTP إلى العميل (ما هو رأس HTTP؟ دعنا نضعها على هذا النحو ، على سبيل المثال ، الكتابة إلى ملفات تعريف الارتباط العميل هي معلومات رأس HTTP ، ويتم إرسال معلومات رأس HTTP إلى عزل الخادم المسموح به في بعض الأحيان لا يسمح بإرسال HTP إلى الإرسال ، حيث لا يتم تشغيله إلى الإرسال. المعلومات.) ، يخبر محتوى المعلومات متصفح العميل بالقفز إلى الصفحة لتصفح. لاحظ أن هذه المعلومات إعادة التوجيه تعمل على الفور ، أي أن هذه المعلومات إعادة التوجيه حصرية. عند تشغيل المخزن المؤقت ، بغض النظر عن مقدار المحتوى الذي تمت كتابته في المخزن المؤقت باستخدام Response.write ، بمجرد استجابة. إذا تتبعنا تنفيذ البرنامج ديناميكيًا ، فسوف نجد أيضًا أنه بعد استدعاء الاستجابة. REREDIRECT ، يتوقف البرنامج عن التنفيذ ، لذا يرجى ملاحظة أن البرنامج من جانب الخادم يجب أن يغلق اتصال البيانات والعمليات الأخرى قبل استدعاء الاستجابة.
فكيف ينبغي تعديل المثال أعلاه؟ إذا لم تكن مستعدًا لتعديل هذا الفهرس لإضافة مطالبات البرنامج النصي ، فيمكنك فقط وضع أمر التوجيه في البرنامج النصي العميل لتنفيذه ، مثل هذا:
| ما يلي هو المحتوى المقتبس: <٪ استجابة. write <script type = text/javaScript> _ & Alert ('!') ؛ location.href = 'index.asp' </script> ٪> |
حصة: ASP 3.0 البرمجة المتقدمة (33) 7.4.2 معالجة الأخطاء VBScript في VBSCript ، لا يمكن لمترجم البرنامج النصي التعامل مع أي أخطاء يجدها ، وتستمر في تشغيل العبارة التالية باستخدام ON ERRREAR RESUME NEXT PRATEM. بمجرد معالجة هذا البيان ، سيستمر محرك البرنامج النصي في تشغيل البرنامج اللاحق.