موصى به: مجموعة مفيدة من الوظائف في تطوير ASP (1) مجموعة من الوظائف المفيدة في تطوير ASP مفيدة للغاية! أتمنى أن يحافظ الجميع على ذلك! ٪ '************************************************************************************ ******************************************* Function CHKPOST () DIM Server_v1 ، Server_v2 chkpost = false server_v1 = cstr.servervari
في VBScript ، هناك عبارة عن خطأ في السيرة الذاتية التي تتسبب في تجاهل مترجم البرنامج النصي لتجاهل أخطاء وقت التشغيل ومتابعة تنفيذ رمز البرنامج النصي. ثم يمكن للنص التحقق من قيمة خاصية err.number لتحديد ما إذا كان حدث خطأ. في حالة حدوث خطأ ، يتم إرجاع قيمة غير صفرية. في ASP 3.0 ، يمكنك أيضًا استخدام Error Goto 0 للعودة إلى معالجة الأخطاء الافتراضية. يتم تنفيذ هذا النوع من المعالجة بالفعل في ASP 2.0 ، ولكن لا يوجد وصف مستند مقابل ، وهو أمر شائع في العديد من ملفات المعالجة المتعلقة بالبيانات ASP. أضف ON ERRREW استئناف بجوار إيقاف تشغيل معالجة الخطأ الافتراضية ثم استخدم ERR للقبض عليه.إذا أخطأ بعد ذلك
err.clear
حدث خطأ في الرد.
استجابة
إنهاء إذا
من أجل الحصول على وصف خطأ أكثر تفصيلاً ، لنجرب كائن Asperror. إنه كائن جديد من ASP3.0. يمكن الحصول عليها من خلال طريقة getLasterror لكائن الخادم . يقدم Asperror معلومات مفصلة حول الخطأ الأخير في ASP. على عكس كائن ERR في VBScript ، لا يمكن استدعاء هذه الطريقة في أي وقت لمعرفة ما إذا كان هناك خطأ. لا يمكن استخدامه إلا في صفحة ويب خطأ مخصصة لـ ASP. إذا كنت تستخدمه عن طريق إيقاف تشغيل معالجة الأخطاء الافتراضية (باستخدام ON ON ERRREAR BUTING NEXT) مثل استخدام كائن ERR ، لا يمكن طريقة GetLasterror الوصول إلى البيانات التفصيلية للخطأ.
خصائص Asperror Object:
يوفر كائن Asperror تسع سمات للإشارة إلى طبيعة ومصدر الخطأ الذي حدث ، ويقوم بإرجاع الكود الفعلي الذي تسبب في الخطأ. الخصائص والأوصاف هي كما يلي:
Aspcode: عدد صحيح. رقم الخطأ الذي تم إنشاؤه بواسطة ASP/IIS ، مثل 0x800A009
ASPDescription: نوع السلسلة. إذا كان هذا الخطأ هو خطأ مرتبط بـ ASP ، فإن هذه الخاصية هي وصف مفصل للخطأ. على سبيل المثال: جميع http: http_accept:*/* http_accept_language: zh-cn http_connection: keep-alive http_host: s http_user_agent: mozilla/4.0 (compatible ؛ msie 6 ؛
الفئة: نوع السلسلة. مصدر الخطأ هو لغة البرمجة النصية الداخلية ASP ، أو كائن.
العمود: عدد صحيح. موقع الحرف في الملف الذي أنشأ الخطأ
الوصف: نوع السلسلة. وصف موجز للخطأ
ملف: نوع السلسلة. اسم الملف الذي يتم معالجته عند حدوث الخطأ
الخط: عدد صحيح. رقم السطر في الملف الذي أنشأ الخطأ
الرقم: عدد صحيح. رمز خطأ كوم قياسي
المصدر: نوع السلسلة. الكود الفعلي للخط الذي أثار الخطأ
حسنًا ، هذه هي 9 خصائص. بناء جملة استخدام كائن Asperror هو:
Asperror.Property
هذا كل شيء: asperror.aspcode ()
asperror.aspdescription ()
asperror.category ()
asperror.column ()
Asperror.Description ()
asperror.file ()
asperror.line ()
asperror.number ()
Asperror.Source ()
عندما يحدث خطأ مرتبط بـ ASP في أي صفحة ضمن جميع الدلائل التي تدعمها IIS (أو في الدليل حيث يتم تحرير خصائص رسم خرائط الخطأ) ، سيتم تحميل صفحة الخطأ المخصصة. في الواقع ، تم تعيين فخ خطأ في البرنامج النصي العادي الآن ، لأن خطأ وقت تشغيل ASP في أي صفحة ويب في هذا الدليل سيؤدي إلى صفحة خطأ مخصصة. صفحة ويب الخطأ هي جزء التثبيت الافتراضي من IIS ويمكن تخصيصه وفقًا للمواقف الشخصية. على سبيل المثال ، عندما ندخل صفحة ويب غير موجودة في دليل ، يحدث خطأ 404. عند حدوث خطأ 404 ، فإن الصفحة المستخدمة هي 404b.htm. يحتوي هذا الملف على جزء رمز البرنامج النصي العميل ، والذي يحصل على عنوان URL للوثيقة الحالية (استرداد من سمة عنوان url لكائن المستند) ويعرضه في الصفحة: [html] <! doctype html public -// w3c // dtd html 3.2 final // en>
<html dir = ltr>
<head>
<style> a: link {font: 9pt/11pt 环 ؛ اللون: ff0000} a: زيارة {font: 9pt/11pt 环 ؛ اللون:#4e4e4e}
</style>
<اسم meta = محتوى الروبوتات = noindex>
<title> غير قادر على العثور على صفحة الويب </title>
<meta http-equiv = content-type content = text-html ؛ charset = gb2312>
<meta name = Ms.Locale content = Zh-Cn>
</head>
<script>
وظيفة الصفحة الرئيسية () {
<!-
// في أجزاء حقيقية ، يتم إرجاع عناوين URL إلى نصنا مثل هذا:
// res: //shdocvw.dll/http_404.htm#http: //www.docurl.com/bar.htm
// للاختبار ، استخدم docurl = res: //shdocvw.dll/http_404.htm#https: //www.microsoft.com/bar.htm
docurl = document.url ؛
// هذا هو المكان الذي سيكون فيه HTTP أو HTTPS ، كما هو موجود عن طريق البحث عن: // ولكن تخطي الدقة: //
protocolindex = docurl.indexof (: // ، 4) ؛
// هذا يجد الانقسام المائل لخادم المجال
serverIndex = docurl.indexof (/، protocolindex + 3) ؛
// لـ HREF ، نحتاج إلى عنوان URL صالح للمجال. نبحث عن الرمز # للعثور على البداية
// من عنوان URL الحقيقي ، وأضف 1 لتخطيه - هذه هي قيمة المبارزة. نستخدم ServerIndex كعلامة النهاية.
//urlresult=docurl.substring(protocolindex - 4 ، serverIndex) ؛
stalurl = docurl.indexof (#، 1) + 1 ؛
urlresult = docurl.subString (stervIndEx) ؛
// للعرض ، نحتاج إلى تخطي بعد http: // ، والانتقال إلى القطع القادمة
DisplayResult = docurl.substring (protocolindex + 3 ، serverIndex) ؛
inserelementancor (urlresult ، displayResult) ؛
}
وظيفة htmlencode (نص)
{
return text.replace (/&/g ، '& amp'). استبدال (/'/g ،' & quot ؛ '). استبدال (/</g ،' & lt ؛ '). استبدال (// g ،' & gt ؛ ') ؛
}
وظيفة tagattrib (الاسم ، القيمة)
{
إرجاع ''+name+'='+htmlencode (value)+'' ؛
}
وظيفة printtag (tagName ، NeedClosetag ، attrib ، inner) {
document.write ('<' + tagname + attrib + '>' + htmlencode (inner)) ؛
if (needclosetag) document.write ('</' + tagname + '>') ؛
}
وظيفة URI (HREF)
{
iever = window.navigator.appversion ؛
iever = iever.substr (iever.indexof ('msie') + 5 ، 3) ؛
العودة (iever.charat (1) == '.' && iever> = '5.5')؟
Encodeuri (HREF):
Escape (HREF) .replace (/٪ 3a/g ، ':'). استبدال (/٪ 3b/g ، '؛') ؛
}
دالة insertelementor (HREF ، نص)
{
printtag ('a' ، true ، tagattrib ('href' ، uri (href)) ، text) ؛
}
//->
</script>
<body bgcolor = ffffff>
<عرض الجدول = 410 cellpadding = 3 cellpacing = 5>
<tr>
<td align = Left Valign = العرض الأوسط = 360>
<H1 Style = Color: 000000 ؛ الخط: 12pt/15pt songti> <!-مشكلة-> لا يمكن العثور على صفحة الويب </h1>
</td>
</r>
<tr>
<td width = 400 colspan = 2> <font style = color: 000000 ؛ الخط: 9pt/11pt> قد تم حذف صفحة الويب التي تبحث عنها أو إعادة تسميتها أو غير متوفرة مؤقتًا. </font> </td>
</r>
<tr>
<td width = 400 colspan = 2> <font style = color: 000000 ؛ الخط: 9pt/11pt أغنية الخط>
<hr color =#c0c0c0 noshade>
<p> يرجى تجربة ما يلي: </p>
<ul>
<li> إذا قمت بكتابة عنوان ويب في شريط العناوين ، فتحقق من توضيحه بشكل صحيح. <br>
</li>
<li> افتح <script>
<!-
if (! ((window.navigator.useragent.indexof (msie)> 0) && (window.navigator.appversion.charat (0) == 2))))))
{
الصفحة الرئيسية () ؛
}
//->
</script> الصفحة الرئيسية ، ابحث عن روابط للمعلومات المطلوبة. </li>
<li> انقر فوق الزر <a href = javaScript: History.back (1 )> back </a> لتجربة الروابط الأخرى. </li>
</ul>
<h2 style = font: 9pt/11pt songti ؛ اللون: 000000> http 404 - لا يمكن العثور على الملف <br> خدمة معلومات الإنترنت <br> </h2>
<hr color =#c0c0c0 noshade>
<p> المعلومات الفنية (دعم الأفراد) </p>
<ul>
<li> التفاصيل: <br> <a href = http: //www.microsoft.com/contentredirec
</li>
</ul>
</font> </td>
</r>
</table>
</body>
</html>
[/html]
عند حدوث خطأ ، يتم تحديد علاقة التعيين بين الخطأ وملف صفحة الويب خطأ في علامة تبويب الأخطاء المخصصة في مربع الحوار خصائص لكل دليل. هذا في إعدادات الممتلكات في مدير خدمات الإنترنت. إذا كنت مهتمًا ، فاذهب وألقي نظرة.
خطأ مخصص تعرض صفحة الويب جميع قيم سمة كائن Asperror ، وإرجاع رسالة حالة رأس HTTP إلى العميل باستخدام طريقة الاستجابة. Status ، مما يشير إلى حدوث خطأ. ثم استخدم طريقة getLasterror للحصول على مرجع إلى كائن Asperror ، بحيث يمكنك الوصول إلى البيانات التفصيلية للخطأ:
...
<٪
استجابة. status = 500 خطأ في الخادم الداخلي
تعيين Objaspeerror = server.getlasterror ()
٪>
تنفيذ الصفحة حاليًا: <b> show_error.asp </b> <p>
<b> تفاصيل الخطأ: </b> <br>
asperror.aspcode = <٪ = objaspeerror.aspcode ٪> <br>
asperror.number = <٪ = objaspeerror.number ٪> (0x <٪ = hex (objaspeerror.number) ٪>) <br>
asperror.source = <٪ = server.htmlencode (objasperror.source) ٪> <br>
asperror.category = <٪ = objaspeerror.category ٪> <br>
asperror.file = <٪ = objaspeerror.file ٪> <br>
asperror.line = <٪ = objaspeerror.line ٪> <br>
asperror.column = <٪ = objaspeerror.column ٪> <br>
asperror.description = <٪ = objaspeerror.description ٪> <br>
asperror.aspds = <٪ = objaspeerror.aspds ٪>
<form action = <٪ = request.servervariables (http_referer) ٪> method = post>
<نوع الإدخال = إرسال اسم = cmdok value = العودة إلى الصفحة السابقة>
<p>
</form> في حالة حدوث برنامج نصي أو خطأ في ASP في صفحة خطأ مخصص ، فإن IIS ستعيد فقط رسالة عامة تتوافق مع رمز الخطأ 500: 100. قد تكون هذه رسالة خطأ من محرك البرنامج النصي نفسه ، أو مجرد رسالة بسيطة إلى حد ما: خطأ في الخادم الداخلي. لن يتم إعادة تحميل صفحة الخطأ المخصصة مرة أخرى.
سيتم تسليم جميع البيئات التي تحتوي على صفحة الويب الخاطئة إلى صفحة الويب الخاطئة المخصصة. وهذا هو ، يمكن استخدام القيم المخزنة في أي مجموعة أو سمة كائن داخلي ASP. على سبيل المثال ، إذا قمت باسترداد قيمة http_referer من مجموعة request.servervariables ، فسوف يعكس عنوان URL الخاص بالصفحة التي تسمى الصفحة الأصلية (أي الصفحة التي كانت قبل حدوث الخطأ). لا تتغير هذه القيمة عندما ينقل الخادم تنفيذ صفحة الويب الخاطئة ، ولن يحتوي على عنوان URL لصفحة الويب التي تم تنفيذها عند حدوث الخطأ.
وبالمثل ، ستكون قيمة Script_Name هي اسم الصفحة التي تحتوي على الخطأ ، وليس عنوان URL للصفحة. عند تحميل صفحة خطأ ، يمكنك تأكيد ذلك عن طريق التحقق من عنوان URL في شريط عناوين المتصفح. ومع ذلك ، فإن القيم المخزنة في متغيرات البرنامج النصي في صفحة الويب الأصلية غير متوفرة في صفحة الويب الخاطئة المخصصة.
إذا كانت صفحة ويب ASP الأصلية تعمل ضمن معاملة ، أي ، هناك <٪ @Transaction = ... ٪> التوجيه في مقدمة صفحة الويب ، يجب عليك أيضًا تحديد ما إذا كان يجب اتخاذ بعض الطرق في صفحة الويب للخروج من المعاملة. على سبيل المثال ، يمكنك استدعاء طريقة setabort مع كائن ObjectContext المدمج:
ObjectContext.setabort
حسنًا ، لقد أرسل الوقت الأمامي الآلاف من رسائل البريد الإلكتروني العشوائية ، وكلها معالجة خطأ
الخيار صريح
استجابة. رمز حالة adddheader ، 200
رد
عند استئناف الخطأ التالي
استجابة
قاتمة objerror
تعيين OBJERROR = server.getlasterror ()
Dim Objerr ، Objmail ، HTML
تعيين objerr = server.getlasterror ()
تعيين objmail = createObject (cdonts.newmail)
objmail.from = [email protected]
objmail.to = [email protected]
objmail.bodyformat = 0
objmail.mailformat = 0
objmail.subject = QOP خطأ 500
html = <font face = 'verdana ، arial ، helvetica ، sans-serif'> <br>
html = html & <p> حدث خطأ في: & الآن
html = html & <p> المشار إليها من: & request.servervariables (http_referer)
html = html & <p> url: & request.servervariables (url)
html = html & <p> <b> الفئة: </b> </p> & objerr.category
html = html & <p> <b> اسم الملف: </b> </p> & objerr.file
html = html & <p> <b> رمز ASP: </b> </p> & objerr.aspcode
html = html & <p> <b> الرقم: </b> </p> & objerr.number
html = html & <p> <b> المصدر: </b> </p> & objerr.source
html = html & <p> <b> linenumber: </b> </p> & objerr.line
html = html & <p> <b> العمود: </b> </p> & objerr.column
html = html & <p> <b> الوصف: </b> </p> & objerr.description
html = html & <p> <b> الوصف ASP: </b> </p> & objerr.aspdescription
html = html & <blockquote>
html = html & all http: & request.servervariables (all_http)
html = html & </blockquote> </font>
objmail.body = html
objmail.send
objerr.clear
تعيين Objmail = لا شيء
تعيين OBJERR = لا شيء
استجابة. write (HTML)
هذا أمر مزعج حقا للعمل. انظر إلى ما كتبه السيد لاو جاي في 500-100.asp:
<٪
استجابة. write objasperror.category
إذا كان objaspeerror.aspcode> ثم response.write ، و objaspeerror.aspcode
Response.write (0x & hex (objasperror.number) &) & <br>
Response.write <b> & objasperror.description & </b> <br>
إذا كان objaspeerror.aspds> response.write objaspeerror.aspds & <br>
blnerrorwritten = false
"عرض المصدر فقط إذا كان متاحًا والطلب من نفس الجهاز مثل IIS
إذا كان objaspeerror.source> ثم
strserverName = lace (request.servervariables (server_name))
strserverip = request.servervariables (local_addr)
strremoteip = request.servervariables (Remote_Addr)
if (strServerName = localHost أو strserverip = strremoteip) و objasperror.file <>؟ ثم
استجابة. write objasperror.file
إذا كان objasperror.line> 0 ثم استجابة.
إذا كان objaspeerror.column> 0 ثم استجابة.
الرد. write <br>
استجابة. write <font style = color: 000000 ؛ الخط: 8pt/11pt Courier جديد> <b>
reponse.write server.htmlencode (objasperror.source) & <br>
إذا كان objaspeerror.column> 0 ثم استجابة.
استجابة. write </b> </font>
blnerrorwritten = صحيح
إنهاء إذا
إنهاء إذا
إذا لم يكن blnerrorwritten و objasperror.file <>؟ ثم
Response.write <b> & objasperror.file
إذا كان objasperror.line> 0 ثم استجابة.
إذا كان objaspeerror.column> 0 ثم استجابة.
استجابة. write </b> <br>
إنهاء إذا
٪>
فيما يلي مرجع: البرمجة المتقدمة ASP 3.0 فيما يتعلق بخصائص استخدام كائنات Asperror ، هناك النقاط التالية جديرة بالملاحظة:
· حتى في حالة حدوث أي خطأ ، يجب أن يكون لخاصية الرقم دائمًا قيمة. في حالة عدم حدوث أي خطأ عندما تستدعي صفحة الويب ASP طريقة getLasterror ، تكون قيمة هذه الخاصية 0. عادةً ، بالنسبة لخطأ وقت التشغيل في البرامج النصية لـ ASP ، تقوم خاصية الرقم بإرجاع القيمة السداسية 0x800a0000 ، بالإضافة إلى رمز خطأ محرك البرنامج النصي القياسي. على سبيل المثال ، يعيد المثال السابق قيمة 0x800A0009 للترتيب الخاص بالخطأ من النطاق ، لأن رمز الخطأ لـ VBScript لهذا الخطأ هو 9.
· عند مرور الخطأ ، فإن سمات الفئة والوصف سيكون لها قيمة دائمًا.
· يتم إنشاء قيمة خاصية APSCode بواسطة IIS وستكون فارغة لمعظم أخطاء البرنامج النصي. في المزيد من الحالات ، هناك قيم مقابلة عند استخدام مكون خارجي خطأ.
يتم إنشاء قيمة خاصية ASPDescription بواسطة المعالج المسبق لـ ASP ، وليس بواسطة محرك البرنامج النصي المستخدم حاليًا ، وسيكون فارغًا لمعظم أخطاء البرنامج النصي. في كثير من الأحيان ، هناك قيمة مقابلة للأخطاء مثل استدعاء طريقة غير صالحة على كائن مدمج في ASP.
لا يمكن تعيين خصائص الملف والمصدر والخط والعمود إلا عند حدوث خطأ وإذا كانت البيانات المفصلة للخطأ متاحة. بالنسبة لخطأ وقت التشغيل ، عادة ما تكون خصائص الملف والخط صالحة ، لكن خاصية العمود غالباً ما تُرجع -1. يتم إرجاع خاصية المصدر عندما يكون الخطأ خطأ في بناء الجملة الذي يمنع معالجة الصفحة بواسطة ASP. بشكل عام ، في هذه الحالات ، تكون خصائص الخط والعمود صالحة. إذا قمت بكتابة قيمة خاصية المصدر إلى الصفحة ، فمن الحكمة نقل القيمة إلى HTMLencode أولاً ، في حالة وجود أحرف HTML غير قانونية. ستتم مناقشة طريقة HTMLencode بالتفصيل لاحقًا في هذا الفصل.
كائن خطأ
النصائح: هذه هي المرة الثانية التي كتبت فيها هذا ، nnd. كان التركيز الأصلي على إدخال كائن Asperror. سأقدم الآن كائن ERR. هذا كائن بسيط للغاية وسهل التشغيل. دعنا نذهب. ، في صفحة ASP.
عند استخدام كائن ERR ، لا تحتاج إلى إنشاء مثيل ، مما يعني أنه يمكنك استخدامه بشكل عرضي عندما تريد استخدامه. تمامًا مثل الجلسة ، لا تحتاج إلى إنشاء مثيل مثل عند استخدام كائن ADODB. set conn = server.createObject (adodb.connection) يتم استخدامه لإنشاء مثيل. يقوم بإرجاع رمز الخطأ ، ولكن يمكن مسح err! = err.number مع الطريقة الواضحة لتسهيل الاستخدام التالي. طريقةها الرئيسية هي طريقة الوصف ، والتي تُرجع وصفًا موجزًا خطأ. هنا مثال كلاسيكي للغاية:
<٪@ language = vbscript ٪>
<٪ استجابة. buffer = صواب
عند استئناف الخطأ التالي
٪>
<٪
S = SA
استجابة. write (int (s))
إذا err.number <> 0 ثم
استجابة
حدث خطأ في الرد. الكتابة: ٪>
<html>
<head>
<title> </title>
</head>
<body>
رقم الخطأ: <٪ = err.number ٪> <br/>
رسالة الخطأ: <٪ = err.description ٪> <br/>
ملف الخطأ: <٪ = err.source ٪> <br/>
خط الخطأ: <٪ = err.line ٪> <br/>
<٪ = err ٪>
</body>
</html>
<٪ نهاية إذا ٪>
قم بتشغيله وانظر ، err.line فارغ ، لماذا؟ نظرًا لأن طريقة الخط المكتوبة في ASP's VB غير مدعومة ، فهذه خاصية نفايات في دعم vb.jscript ، وتحتاج إلى الدراسة للقبض عليها.
تجدر الإشارة إلى أنه عند استخدام كائن ERR ، يجب إضافة استئناف الخطأ بعد ذلك ، ويجب إلقاء الاستثناء الذي اجتاز كائن Asperror.
عند ربط قاعدة بيانات ، يمكنك استخدام كائن الخطأ: العد الخاصية: المستخدمة لحساب عدد مجموعات الأخطاء ، طريقة العنصر: المستخدمة لتحديد خطأ محدد ، فإن بناء الجملة هو خطأ (رقم) ، حيث يكون الرقم رقمًا. نظرًا لأن العنصر هو الطريقة الافتراضية ، فإن طريقة الكتابة للخطأ (رقم) تعادل الطريقة السابقة. أدناه هو برنامج. تستخدم لتعداد كائنات الخطأ:
<٪
عند استئناف الخطأ التالي
تعيين conn = server.createBject (adodb.connection)
Dim i ، your_databasepath: your_databasepath = no.mdb
connstr = provider = microsoft.jet.oledb.4.0 ؛ data source = & server.mappath (your_databasepath) &
Conn.Open Connstr
إذا conn.errors.count <> 0 ثم
استجابة. فشل في ربط قاعدة البيانات <hr/>
ل I = 0 إلى conn.errors.count-1
Response.write conn.errors.item (i) & <HR>
استجابة. write err.description
التالي
آخر
Response.write Link Database بنجاح
إنهاء إذا
conn.close
٪>
لا يوجد فرق بين كائن ERR ، هل رأيت نتيجة المقارنة؟ الجو بارد جدًا بحيث يكون من السهل استخدام كائن ERR مباشرة.
يوصى عمومًا باستخدام كائن Asperror أثناء تصحيح الأخطاء ، مما يعني أنه إذا كان الخط التالي استئناف السطر التالي ، فسيتم طرحه افتراضيًا مع Asperror. أثناء العملية الرسمية ، يمكنك استخدام كائن ERR للقيام بشيء ما لم يكن لديك متطلبات خاصة.
المشاركة: مجموعة مفيدة من الوظائف في تطوير ASP (2) مجموعة من الوظائف المفيدة في تطوير ASP مفيدة للغاية ، يرجى الاحتفاظ بها! "*********************************************" تصفية الارتباط التشعبي "*****************************************