هل هناك نهج موصى به للتعامل مع حفظ البيانات استجابة للتنقل داخل الموقع دون حدث onunload؟

StackOverflow https://stackoverflow.com/questions/2834243

سؤال

ديباجة لنطاق سؤالي:

لديّ تطبيق ويب (أو موقع ، هذا موقع داخلي للشبكة المحلية) يستخدم jQuery و Ajax على نطاق واسع لتحميل قسم المحتوى في واجهة المستخدم في المتصفح. يقوم المستخدم بالتنقل في التطبيق باستخدام قائمة التنقل. يؤدي النقر فوق عنصر في قائمة التنقل إلى إجراء مكالمة AJAX إلى PHP ، ثم يقوم PHP بإرجاع المحتوى المستخدم لملء قسم المحتوى المركزي.

إحدى الصفحات التي يتم تقديمها من قبل PHP لديها نموذج جدول ، تم إعداده مثل جدول بيانات ، الذي يدخل المستخدم القيم فيها. يتم الحفاظ على هذا الجدول دائمًا متزامنًا مع البيانات في قاعدة البيانات. لذلك ، عند إنشاء الجدول ، هل يتم ملؤه ببيانات قاعدة البيانات ذات الصلة. ثم عندما يقوم المستخدم بإجراء تغيير في "الخلية" ، يتم كتابة هذا التغيير على الفور إلى قاعدة البيانات بحيث يكون الجدول وقاعدة البيانات دائمًا متزامنين. تم اتخاذ هذا النهج لطمأنة المستخدمين بأن البيانات التي أدخلوها قد تم حفظها (قصة طويلة ...) ، ولتخفيفهم من الاضطرار إلى النقر على زر حفظ من نوع ما.

لذا ، فإن هذا دائمًا في فكرة متزامنة أمر رائع ، باستثناء أنه يمكن للمستخدم إدخال قيمة في خلية ، ولا يركز على الخلية ، ثم يتخذ أي عدد من الإجراءات التي قد تتسبب في فقدان القيمة الأخيرة: على سبيل المثال ، انتقل إلى قسم آخر من الموقع عبر قائمة التنقل ، وتسجيل الخروج من التطبيق ، وإغلاق المتصفح ، إلخ.

نهاية الديباجة ، إلى القضية:

لقد اعتقدت في البداية أن هذه لم تكن مشكلة ، لأنني سأتتبع فقط البيانات "قذرة" أو لم يتم حفظها ، ثم في حدث OnUnload ، سأقوم بكتابة نهائية إلى قاعدة البيانات. هنا يكمن الفرك: بسبب استخدامي الذكي (أو غير ذكي ، غير متأكد) من Ajax وتحميل قسم المحتوى ديناميكيًا ، لا يترك المستخدم عن عنوان URL الأصلي أو الصفحة الأصلية ، عند اتخاذ الإجراءات أعلاه ، باستثناء الاستثناء من إغلاق المتصفح. لذلك ، لا يطلق حدث OnUnload ، وقد عدت إلى فقدان البيانات الأخيرة مرة أخرى.

سؤالي ، هل هناك طريقة موصى بها للتعامل مع معرفة ما إذا كان الشخص يتنقل بعيدًا عن "قسم" من تطبيقك عندما يتم تحميل المحتوى ديناميكيًا بهذه الطريقة؟

أعتقد أنني أتوصل إلى حل على ما أعتقد ، يتضمن الكرات وتتبع الصفحة التي يتم مشاهدتها حاليًا ، لكنني اعتقدت أنني سوف أتحقق مما إذا كان هناك حل أكثر أناقة هناك ، أو تغيير يمكنني إجراءه في تصميمي هذا العمل.

شكرا مقدما كما هو الحال دائما!

هل كانت مفيدة؟

المحلول

أردت المتابعة هنا ، فقط في حال كان أي شخص مهتمًا. تبين أن سؤالي لم يكن ضروريًا.

نظرًا لأنني قمت بإعداد الكود الخاص بي لحفظ المعلومات التي تم إدخالها في حدث التغيير لعنصر الإدخال ، وبما أن حدث التغيير يطلق النار فقط عندما يفقد العنصر المعني التركيز ، فإذا انقر المستخدم في أي مكان آخر في واجهة تطبيق الويب الخاصة بي ، فإن ذلك يطلق الحدث تغيير الإدخال ، ويتم حفظ البيانات.

الاستثناءات الوحيدة هي إذا قاموا بتحديث الصفحة ، أو يغلقون المتصفح ، لكن كلا الحدثين يؤديان إلى حدث OnUnload ، مما يعني أنه يمكنني ربط وظيفة حفظ البيانات الخاصة بي بهذا الحدث والتعامل مع هذه الحالات.

لذا فإن كل شيء يعمل كما كنت آمل ذلك ، ونشأ ارتباك من سوء فهم عندما يطلق حدث التغيير.

نصائح أخرى

عادة ما يكون Ajax مبالغة في التنقل في الموقع. ما لم يكن هناك سبب مقنع لاستخدام Ajax ، سأجعل فقط قائمة التنقل الخاصة بك تستخدم روابط قديمة جيدة بدلاً من مكالمات Ajax.

يتم استخدام Ajax للحفاظ على غموض المستخدم في التطبيق ، دون رؤية وميض ، وما إلى ذلك لتحديث الصفحة الكاملة. ومع ذلك ، إذا كانوا يخططون للانتقال إلى صفحة أخرى ، فمن المتوقع تحديث الصفحة الكاملة (وبالتالي مرغوب فيه).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top