إعادة تحميل صفحة عبر ajax عندما window.location = self.location لا يعمل

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

سؤال

حصلت على صفحتي الرئيسية:

<ul id="login">
  <li> <a id="loginswitch" href="./login-page">log-in</a> | </li>
  <li> <a id="signupswitch" href="./signup-page">sign-up</a> </li>
</ul>

عبر Mootools ، أحصل على عناصر المرساة هذه حسب المعرف بحيث بمجرد النقر عليها ، ستظهر Div المبهجة أسفلها والتي تحتوي على نموذج تسجيل الدخول أو التسجيل (مع طرق لوقف انتشار الأحداث بالطبع) الحقول التي يتم تشغيل مكالمة AJAX-من المفترض أن تنشئ جلسة وإعادة تحميل الصفحة حتى يكون لدى المستخدم مرئيًا يتم تسجيله الآن وظهر السيطرة على مستوى المستخدم وما إلى ذلك ..

يتم بدء مكالمة Ajax بواسطة فئة Mootools Ajax و evalScripts تم تعيين الخيار على True. تقوم صفحة Ajax بإرجاع رمز البرنامج النصي:

<script type="text/javascript">window.location = self.location;</script>

يعمل هذا النظام تمامًا - الآن أتساءل لماذا إذا قمت بتغيير المراسي href القيم ل href="#" البرامج النصية الخاصة بي لن تعمل بعد الآن؟

هل لها أي علاقة بالنافذة؟

هل قامت بتغيير ممتلكاتها عندما قمت بالنقر فوق رابط أو نحو ذلك حتى عندما تم إيقاف انتشار الحدث ؟؟

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

المحلول

window.location = self.location;

هذا JavaScript ينفذ.

عندما يتم تنفيذها ، يُطلب من المتصفح استبدال قيمة Window.location بقيمة جديدة. ليس كل المتصفحات سوف يتفاعل بنفس الطريقة هنا .. من المحتمل أن يعمل البعض كما تتوقع ، لكن الآخرين سيصبحون ذكيًا بشأنه ومقارنة القيمتين. المتصفح يعرف ما هي الصفحة التي يتم تشغيلها ، وهي تعرف أنك تطلب فقط الذهاب إلى نفس الصفحة.

مخبأ المتصفح

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

GET /stackoverflow.com/posts/196643/index.html
HTTP/1.1
Host: www.stackoverflow.com
User-Agent: Mozilla/5.0
If-Modified-Since: Sun, 12 Oct 2008 20:41:31 GMT

وهذا ما يسمى أ مشروط الحصول على طلب. بالقول إذا تم تعديلها, يقول متصفحك: "أعطني هذا الملف ، ولكن فقط إذا تم تعديله منذ آخر مرة رأيته فيها."

قصة قصيرة طويلة ، لم تطلب من المتصفح صراحة إعادة تحميل الصفحة.

إليك كيف يمكنك:

location.reload( true );

"الحقيقي" هو معلمة اختيارية, ، إلى عن على إجبار إعادة التحميل. لن ينظر المتصفح إلى ذاكرة التخزين المؤقت .. سيفعل فقط كما تقول.

نصائح أخرى

الذهاب إلى مرساة على الصفحة - وهو ما # يدل - لا يتطلب إعادة التحميل.

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

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