1. الأسباب الرئيسية لاستخدام Ajax
1. لتحقيق تجربة مستخدم أفضل من خلال تطبيقات Ajax المناسبة
2. نقل بعض الأعمال السابقة المثقلة بالخادم إلى العميل، وهو ما يفيد قوة المعالجة الخاملة للعميل ويقلل الخادم؛ وعبء النطاق الترددي، وبالتالي تحقيق الغرض المتمثل في توفير مساحة مزود خدمة الإنترنت وتكاليف استئجار النطاق الترددي.
2. اقتباس
جيسي جيمس جاريت، أول من اقترح مفهوم Ajax، يعتقد أن Ajax هو اختصار لـ Asynchronous JavaScript وXML. Ajax ليست لغة أو تقنية جديدة، بل هي في الواقع عدة تقنيات مدمجة بطريقة معينة لتلعب أدوارها في تعاون مشترك. وهي تشمل:
· استخدام XHTML وCSS لتوحيد العرض.
· استخدام DOM لتحقيق العرض الديناميكي والتفاعل.
· استخدم XML وXSLT لتبادل البيانات ومعالجتها.
· استخدم XMLHttpRequest لقراءة البيانات غير المتزامنة.
· أخيرًا استخدم JavaScript لربط ومعالجة جميع البيانات؛
يعادل مبدأ عمل Ajax إضافة طبقة وسطى يتم إنشاؤها لإجراء عمليات المستخدم بشكل غير متزامن واستجابات الخادم غير متزامنة. لا يتم إرسال جميع طلبات المستخدم إلى الخادم، ويتم ترك بعض التحقق من البيانات ومعالجة البيانات لمحرك Ajax نفسه، فقط عندما يتم تحديد أن البيانات الجديدة تحتاج إلى القراءة من الخادم، سيقوم محرك Ajax بإرسال الطلب إلى الخادم نيابة عنها.
3. نظرة عامة
على الرغم من أن Garrent قد أدرج 7 تقنيات مكونة لـ Ajax، إلا أنني شخصيًا أعتقد أن جوهر ما يسمى Ajax هو فقط JavaScript وXMLHTTPRequest وDOM. إذا كان تنسيق البيانات المستخدم هو XML، فيمكن أيضًا إضافة XML (يبدأ Ajax من جانب الخادم) ويتم إرجاعه يمكن أن تكون البيانات بتنسيق XML أو تنسيقات أخرى مثل النص).
في طريقة التفاعل القديمة، يقوم المستخدم بتشغيل طلب HTTP إلى الخادم، ويقوم الخادم بمعالجته ثم يقوم بإرجاع صفحة HTHL جديدة إلى العميل. كلما قام الخادم بمعالجة طلب مقدم من العميل، يمكن للعميل فقط الانتظار خاملاً. ، وحتى لو كان مجرد تفاعل صغير ويحتاج فقط للحصول على جزء بسيط من البيانات من الخادم، فيجب إرجاع صفحة HTML كاملة، ويتعين على المستخدم إضاعة الوقت وعرض النطاق الترددي لإعادة قراءة الصفحة بأكملها في كل مرة .
بعد استخدام Ajax، يشعر المستخدمون أن جميع العمليات تقريبًا ستستجيب بسرعة دون انتظار إعادة تحميل الصفحة (شاشة بيضاء).
1. XMLHTTPRequest
إحدى أكبر ميزات Ajax هي أنه يمكنه نقل البيانات أو قراءتها وكتابتها إلى الخادم دون تحديث الصفحة (المعروف أيضًا بتحديث الصفحة دون تحديث). تستفيد هذه الميزة بشكل أساسي من كائن XMLHTTPRequest المكون من XMLHTTP. بهذه الطريقة، يمكن لتطبيق سطح المكتب تبادل البيانات مع الخادم فقط دون الحاجة إلى تحديث الواجهة في كل مرة أو إرسال أعمال معالجة البيانات إلى الخادم في كل مرة، وهذا لا يقلل الحمل على الخادم فحسب، بل يسرع أيضًا وقت المعالجة سرعة الاستجابة وتقصير وقت انتظار المستخدم.
كانت شركة Microsoft أول من قام بتطبيق XMLHTTP. قام IE (IE5 وما فوق) بتوسيع وظائفه من خلال السماح للمطورين باستخدام مكونات XMLHTTP ActiveX داخل صفحات الويب. ويمكن للمطورين نقل البيانات مباشرة إلى الخادم أو استردادها من دون التنقل من صفحة الويب الحالية . هذه الميزة مهمة لأنها تساعد في تقليل معاناة الاتصالات عديمة الحالة، ويمكنها أيضًا زيادة سرعة العملية عن طريق التخلص من الحاجة إلى تنزيل HTML زائد عن الحاجة. استجابت Mozilla (Mozilla 1.0 والإصدارات الأحدث وNetScape 7 والإصدارات الأحدث) عن طريق إنشاء فئة وكيل XML الموروثة الخاصة بها: فئة XMLHttpRequest. يدعم Konqueror (وSafari v1.2، وهو أيضًا متصفح يستند إلى KHTML) كائن XMLHttpRequest، وسيدعم Opera أيضًا كائن XMLHttpRequest في إصداره v7.6x+ والإصدارات الأحدث. في معظم الأحيان، يكون كائن XMLHttpRequest مشابهًا جدًا لمكون XMLHTTP، وتكون الأساليب والخصائص متشابهة، باستثناء أن عددًا صغيرًا من الخصائص غير مدعوم.
تطبيق XMLHttpRequest:
· تطبيق كائن XMLHttpRequest في JS
var xmlhttp = new XMLHttpRequest();
· تطبيق مكون XMLHTTP من Microsoft في JS
var xmlhttp = new ActiveXObject(Microsoft.XMLHTTP)
;
طريقة كائن XMLHttpRequest
/**
* إنشاء مثيل XMLHttpRequest عبر المتصفح
*/
if (typeof XMLHttpRequest == 'undef') {
XMLHttpRequest = function () {
var msxmls = ['MSXML3', 'MSXML2', 'Microsoft']
for (
vari
=0;
i<
msxmls.
length
;
}
}
function createXMLHttpRequest() {
حاول {
// محاولة إنشائه "بطريقة Mozilla"
if (window.XMLHttpRequest) {
return new XMLHttpRequest()
}
// لا خمن - الآن بطريقة IE
if (window.ActiveXObject ) {
إرجاع ActiveXObject جديد (getXMLPrefix() + ".XmlHttp" }
}
Catch
(ex) {}
return false
};
كائن XMLHttpRequest
إحباط | ( |
) | إحباط الطلب الحالي |
getAllResponseHeaders () | إرجاع الرؤوس الكاملة كسلسلة |
getResponseHeader("headerLabel") | إرجاع تسمية رأس واحدة كسلسلة |
open("method"،"URL"[,asyncFlag[ , "userName"[, "password"]]]) | قم بتعيين عنوان URL الهدف والطريقة والمعلمات الأخرى للطلب المعلق |
send(content) | أرسل الطلب |
setRequestHeader("label", "value") | قم بتعيين الرأس وإرساله معًا مع طلب |
سمة كائن XMLHttpRequest،
وصف | سمة السمة |
ReadyState | |
لتغيير | الحالة |
حالة الكائن (عدد صحيح): 0 = لم تتم التهيئة 1 = القراءة 2 = إقرأ 3 = التفاعل 4 = أكمل | |
النسخة النصية من البيانات التي تم إرجاعها بواسطة عملية خادم ResponseText | . |
كائن مستند XML المتوافق مع DOM الذي تم إرجاعه | بواسطة |
حالة | خادم ResponseXMLالذي تم إرجاعه بواسطة الخادم، مثل: 404 = "لم يتم العثور على الملف"، 200 = |
"النجاح" | |
بواسطة خادم | StatusText | . معلومات نصية
2. JavaScript
JavaScript هي لغة برمجة تستخدم على نطاق واسع في المتصفحات، وقد تم التقليل من شأنها باعتبارها لغة سيئة في الماضي (إن استخدامها ممل بالفعل) وغالبًا ما يتم استخدامها لدى البعض الأغراض المبهرجة والمزاح أو التحقق من صحة النموذج الممل. لكن الحقيقة هي أنها لغة برمجة حقيقية، ولها معاييرها الخاصة، وهي مدعومة على نطاق واسع في مختلف المتصفحات.
3.
نموذج كائن مستند DOM.
DOM عبارة عن مجموعة من واجهات برمجة التطبيقات لملفات HTML وXML. فهو يوفر تمثيلاً هيكليًا للملف، مما يسمح لك بتغيير محتواه وإمكانية رؤيته. جوهرها هو إنشاء جسر اتصال بين صفحات الويب ولغات البرمجة أو البرامج النصية.
يتم تمثيل جميع الخصائص والأساليب والأحداث التي يمكن لمطوري الويب تشغيلها وإنشاء ملفات بواسطة كائنات (على سبيل المثال، يمثل المستند كائن "الملف نفسه"، ويمثل كائن الجدول كائن جدول HTML، وما إلى ذلك). يمكن الوصول إلى هذه الكائنات من البرنامج النصي بواسطة معظم متصفحات اليوم.
يمكن أيضًا اعتبار صفحة الويب التي تم إنشاؤها باستخدام HTML أو XHTML مجموعة من البيانات المنظمة، وهذه البيانات محاطة بـ DOM (نموذج كائن المستند) الذي يوفر الدعم لقراءة وكتابة الكائنات المختلفة في صفحة الويب.
4. لغة التوصيف القابلة للتوسيع XML
محرك Ajax الذي ذكره جيسي جيمس جاريت هو في الواقع تطبيق جافا سكريبت معقد نسبيًا يستخدم لمعالجة طلبات المستخدم وقراءة وكتابة الخوادم وتغيير محتوى DOM.
يقرأ محرك Ajax الخاص بـ JavaScript المعلومات ويعيد كتابة DOM بشكل تفاعلي، مما يسمح بإعادة بناء صفحات الويب بسلاسة، أي تغيير محتوى الصفحة بعد تنزيلها. وهذا ما كنا نستخدمه على نطاق واسع مع JavaScript وطريقة DOM. ولكن لجعل صفحة الويب ديناميكية حقًا، لا يتطلب الأمر التفاعل الداخلي فحسب، بل يتطلب أيضًا الحصول على البيانات من الخارج. في الماضي، كنا نسمح للمستخدمين بإدخال البيانات وتغيير محتوى صفحة الويب من خلال DOM، ولكن الآن يسمح XMLHTTPRequest. يمكننا قراءة البيانات وكتابتها على الخادم دون إعادة تحميل الصفحة، مما يقلل من إدخال المستخدم.
إن اتصالات الشبكة المستندة إلى XML ليست جديدة، وفي الواقع، كان أداء كل من برنامج FLASH وJAVA صغيرًا، والآن أصبح هذا النوع من التفاعل الغني متاحًا أيضًا على صفحات الويب، وهو يعتمد على تقنيات موحدة ومدعومة على نطاق واسع ولا يتطلب مكونات إضافية أو تنزيل البرنامج الصغير.
يعد Ajax بمثابة تحول لتطبيقات الويب التقليدية. في الماضي، كان الخادم يُنشئ صفحة HTML في كل مرة ويعيدها إلى العميل (المتصفح). في معظم مواقع الويب، يكون ما لا يقل عن 90% من العديد من الصفحات متماثلة، مثل: الهيكل، والتنسيق، والرأس، والتذييل، والإعلانات، وما إلى ذلك. والفرق الوحيد هو جزء صغير من المحتوى، ولكن في كل مرة يقوم الخادم بإنشاء جميع الإرجاعات تعد الصفحة للعميل مضيعة غير مرئية، سواء كان ذلك وقت المستخدم أو عرض النطاق الترددي أو استهلاك وحدة المعالجة المركزية أو عرض النطاق الترددي والمساحة التي يستأجرها مزود خدمة الإنترنت بسعر مرتفع. إذا تم حسابها على أساس الصفحة، فقد لا يكون عدد قليل من K أو العشرات من K أمرًا مثيرًا للإعجاب، ولكن بالنسبة لمزود خدمة إنترنت كبير مثل SINA الذي يولد ملايين الصفحات كل يوم، يمكن القول إنها خسارة فادحة. يمكن أن يكون AJAX بمثابة الطبقة الوسطى بين العميل والخادم للتعامل مع طلب العميل وإرسال الطلب إلى الخادم حسب الحاجة. يمكنك الحصول على ما تستخدمه ومقدار استخدامك، لذلك لن يكون هناك تكرار وإهدار للبيانات ، مما يقلل من إجمالي كمية البيانات التي تم تنزيلها، وليس هناك حاجة لإعادة تحميل المحتوى بالكامل عند تحديث الصفحة، ويمكن تحديث الجزء الذي يحتاج إلى التحديث فقط، مقارنة بطريقة معالجة الخلفية وإعادة التحميل يتم تقصير الوقت وتقليل هدر الموارد إلى الحد الأدنى، استنادًا إلى تقنيات موحدة ومدعومة على نطاق واسع، ولا تتطلب أي مكونات إضافية أو تطبيقات صغيرة تم تنزيلها، يعد Ajax مربحًا لكل من المستخدمين ومقدمي خدمات الإنترنت.
يفصل Ajax بين الواجهة والتطبيق في الويب (يمكن القول أيضًا أنه يفصل بين البيانات والعرض التقديمي). في الماضي، لم تكن هناك حدود واضحة بين الاثنين، مما يؤدي إلى تقسيم العمل والتعاون يقلل من حاجة الموظفين غير التقنيين للتفاعل مع الصفحة، ويتسبب التعديل في حدوث أخطاء في تطبيق الويب، ويحسن الكفاءة، وهو أكثر ملاءمة لنظام النشر الحالي. يمكنك أيضًا نقل بعض الأعمال السابقة المثقلة بالخادم إلى العميل، مما يفيد قوة المعالجة الخاملة لدى العميل.
4.
لقد فتح ظهور تطبيق مفهوم Ajax مقدمة لعصر تحديث الصفحات دون تحديث، وله ميل ليحل محل استخدام تقديم النموذج (form) في تطوير الويب التقليدي لتحديث صفحات الويب، وهو ما يمكن اعتباره كعلامة فارقة. لكن أجاكس لا ينطبق في كل مكان، ويتم تحديد نطاق تطبيقه من خلال خصائصه.
مثال التطبيق هو تطبيق Ajax للقوائم المتتالية.
كانت معالجتنا السابقة للقوائم المتتالية على النحو التالي:
لتجنب إعادة تحميل الصفحة الناتجة عن كل عملية في القائمة، لم نستخدم طريقة استدعاء الخلفية في كل مرة، ولكننا قرأنا جميع بيانات القائمة المتتالية مرة واحدة. تم إخراجها وكتابتها في المصفوفة، ثم استخدم JavaScript للتحكم في عرض مجموعة العناصر الفرعية الخاصة بها بناءً على عمليات المستخدم، وهذا يحل مشكلة سرعة استجابة العملية، وليس إعادة تحميل الصفحة، وتجنب الطلبات المتكررة إلى الخادم، ولكن إذا عدم استجابة المستخدم للقائمة إذا كنت تعمل أو تعمل فقط على جزء من القائمة، فإن جزءًا من بيانات القراءة سيصبح بيانات زائدة عن الحاجة ويهدر موارد المستخدم، خاصة عندما تكون بنية القائمة معقدة وكمية البيانات كبيرة ( على سبيل المثال، تحتوي القائمة على العديد من المستويات، وكل مستوى يحتوي على مئات العناصر)، وهذا العيب أكثر وضوحًا.
إذا تم تطبيق Ajax في هذه الحالة، فسيتم تحسين النتيجة:
عند تهيئة الصفحة، نقرأ فقط جميع بيانات المستوى الأول ونعرضها. عندما يقوم المستخدم بتشغيل أحد عناصر قائمة المستوى الأول، ستظهر النتيجة يتم إرسالها إلى المستخدم من خلال Ajax. تطلب الخلفية جميع بيانات القائمة الفرعية من المستوى الثاني التي ينتمي إليها عنصر المستوى الأول الحالي. وإذا استمرت في طلب عنصر في قائمة المستوى الثاني المقدمة بالفعل، فإنها تطلب الكل بيانات جميع قوائم المستوى الثالث المقابلة لعنصر قائمة المستوى الثاني الذي يتم تشغيله، وما إلى ذلك... وبهذه الطريقة، يمكنك الحصول على كل ما تستخدمه وبقدر ما تحتاج إليه، ولن يكون هناك أي تكرار أو هدر من البيانات، مما يقلل من إجمالي كمية تنزيلات البيانات، وليس هناك حاجة لإعادة تحميل المحتوى بالكامل عند تحديث الصفحة، فقط قم بتحديث الجزء الذي يحتاج إلى التحديث، ومقارنة بمعالجة الخلفية وإعادة التحميل، فإنه يقلل من وقت انتظار المستخدم ويقلل من هدر الموارد.
بالإضافة إلى ذلك، نظرًا لأن Ajax يمكنه استدعاء البيانات الخارجية، فيمكنه أيضًا تحقيق وظيفة تجميع البيانات (مع الترخيص المقابل بالطبع)، مثل الإصدار التجريبي من قارئ RSS عبر الإنترنت الذي أصدرته Microsoft للتو في 15 مارس؛ تطوير بعض البيانات المفتوحة وبعض التطبيقات الخاصة بها، مثل بعض تطبيقات البحث عن الكتب الجديدة باستخدام بيانات أمازون.
باختصار، يعد Ajax مناسبًا لتطبيقات الويب التي تحتوي على الكثير من التفاعلات وقراءة البيانات المتكررة والتصنيف الجيد للبيانات.
1. تخفيف العبء على الخادم. نظرًا لأن المفهوم الأساسي لـ Ajax هو "الحصول على البيانات عند الطلب"، فيمكنه تقليل العبء الناجم عن الطلبات المتكررة والتأثير على الخادم إلى أقصى حد.
2. قم بتحديث الصفحة دون تحديث، مما يقلل من وقت الانتظار الفعلي والنفسي للمستخدم؛
أولاً، "اضغط على وضع "البيانات المطلوبة" لتقليل الكمية الفعلية للبيانات المقروءة. لإعطاء تشبيه واضح للغاية، إذا كانت طريقة التحميل الزائد هي العودة إلى الأصل من نقطة نهاية واحدة ثم إلى نقطة نهاية أخرى، فإن Ajax يعتمد على عند نقطة نهاية واحدة، يمكنك الوصول إلى نقطة نهاية أخرى؛
ثانيًا، حتى إذا كنت تريد قراءة بيانات كبيرة نسبيًا، فليست هناك حاجة إلى شاشة بيضاء مثل RELOAD، لأن Ajax يستخدم XMLHTTP لإرسال طلبات للحصول على بيانات استجابة الخادم، دون إعادة تحميل. استخدم Javascript لتشغيل DOM وأخيرًا تحديث الصفحة، لذلك أثناء عملية قراءة البيانات، لا يواجه المستخدم شاشة بيضاء، بل حالة الصفحة الأصلية (أو يمكنك إضافة مربع مطالبة بالتحميل للسماح يفهم المستخدم حالة عملية قراءة البيانات)، فقط عندما يتم استلام جميع البيانات، يتم تحديث الجزء المقابل من المحتوى، ويكون هذا التحديث أيضًا فوريًا وغير محسوس للمستخدم تقريبًا. باختصار، يمكن للمستخدمين أن يشعروا باهتمامك بهم، وعلى الرغم من أنه من غير المرجح أن يكون له نتائج فورية، إلا أنه سيتراكم اعتمادهم على الموقع شيئًا فشيئًا في قلوب المستخدمين.
3. تجربة مستخدم أفضل
4. يمكن أيضًا نقل بعض الأعمال السابقة المثقلة بالخادم إلى العميل، والتي يمكن استخدامها من خلال قوة المعالجة الخاملة للعميل، مما يقلل العبء على الخادم وعرض النطاق الترددي، ويوفر المساحة وعرض النطاق الترددي. تكاليف الإيجار
5، يمكن لـ Ajax استدعاء البيانات الخارجية
6. يعتمد على تقنية موحدة ومدعومة على نطاق واسع، ولا يتطلب مكونات إضافية أو تطبيقات صغيرة تم تنزيلها
7. يفصل Ajax بين الواجهة والتطبيق في الويب (يمكن أيضًا أن يكون كذلك). يقال لفصل البيانات والعرض)
8. إنه وضع مربح للجانبين للمستخدمين ومقدمي خدمات الإنترنت.
6. مشاكل مع Ajax
1. بعض الأجهزة المحمولة (مثل الهواتف المحمولة وأجهزة المساعد الرقمي الشخصي وما إلى ذلك) لا تدعم Ajax جيدًا بعد؛
2. تعد محركات Ajax المصنوعة من JavaScript وتوافق JavaScript وDeBugs بمثابة صداع
3. عدم تحديث Ajax إعادة التحميل، لأن تغييرات الصفحة ليست واضحة مثل إعادة التحميل، لذلك من السهل التسبب في مشاكل للمستخدمين - المستخدمون غير متأكدين مما إذا كانت البيانات الحالية جديدة أو تم تحديثها، وتشمل الحلول الحالية ما يلي: مطالبات الموقع ذات الصلة وتحديث البيانات تم تصميم المناطق لتكون أكثر وضوحًا، ويتم مطالبة المستخدمين بعد تحديث البيانات، وما إلى ذلك.
4. دعم وسائط البث ليس جيدًا مثل برنامج FLASH وJava الصغير؛