English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
مقدمة
في الآونة الأخيرة، عند العمل على المشروع، وجدت أن الطلبات ajax لا يمكن توجيهها مباشرة إلى صفحة الدخول على الخادم. بعد البحث في بعض المواد، وجدت أن هناك طريقة قد قدمها شخص ما لطلبات ajax في jquery. ولكن هناك بعض الاختلافات بين طلبات ajax في webix وjquery. هنا، تمت محاكاة طريقة معالجة jquery لتحقيق توجيه session timeout في طلبات ajax في webix.
الطريقة المحددة:
1. عند النظر في ملف المصدر webix.js، وجدت أن webix.ajax يحتوي فقط على وظائف الاستماع قبل الطلب "onBeforeAjax"، ولكي يتم الحصول على حالة الرد وتوجيه الصفحة إلى صفحة الدخول، يجب أن يكون هناك وظيفة استماع للرد، ولكن لم يجد في المصدر. لذا قمت بتعديل المصدر، وأضفت وظيفة استماع للرد "onAfterAjax".
الجزء الأحمر المميز هو الكود الذي أضفته، عند إكمال ajax، يتم تنفيذ "onAfterAjax" تلقائيًا. (يمكن البحث عن موضع الكود في webix.js باستخدام الشروط "onBeforeAjax"، ثم إضافة الكود الأحمر في الموضع المناسب
إذا كان (webix.callEvent("onBeforeAjax", [s، t، e، a، o، null، r])) {}} إذا كان h = !1; إذا كان ("GET" !== s) { إذا كان l = !1; إذا كان (في o) "content-type" == c.toString().toLowerCase()، فإن (l = !0، إذا كان "application/json" == o[c]، فإن (h = !0)); إذا كان l أو (o["Content-Type"] = "application/x-www-form-urlencoded") } إذا كان ("object" == typeof e) إذا كان h، فإن e = هذا.stringify(e); وإلا { إذا كان u = []; إذا كان (في e) d في { إذا كان f = e[d]; إذا كان (null === f أو f === webix.undefined)، فإن (f = ""), إذا كان "object" == typeof f، فإن (f = هذا.stringify(f))، u.push(d + "=" + encodeURIComponent(f)) } إذا كان e = u.join("&"), } إذا كان e && "GET" === s، فإن (t = t + (إذا كان (-1 != t.indexOf("?") ? "&" : "?") + e), إذا كان e = null)، a.open(s، t، !هذا.H); إذا كان b = هذا.Tw; إذا كان b && (a.responseType = b); للأسف (في o) a.setRequestHeader(c, o[c]); إذا كان x = هذا; عد هذا.master = هذا.master أو n، a.onreadystatechange = function () { إذا (!a.readyState أو 4 == a.readyState) { إذا (كان webix.callEvent("onAfterAjax", [a]) === !1) { return false; }; if (webix.ajax.count++, i && x && !a.aborted) { if (-1 != webix.ly.find(a))return webix.ly.remove(a); var t, e, s = x.master || x, r = a.status >= 400 || 0 === a.status; "blob" == a.responseType || "arraybuffer" == a.responseType ? (t = "", e = a.response) : (t = a.responseText || "", e = x.J(a)), webix.ajax.$callback(s, i, t, e, a, r) } x && (x.master = null), i = x = n = null } }, this.qh && (a.timeout = this.qh), this.H ? a.send(e || null) : setTimeout(function () { a.aborted || (-1 != webix.ly.find(a) ? webix.ly.remove(a) : a.send(e || null)); }, 1), this.master && this.master.Ve && this.master.Ve.push(a), this.H ? a : r }
2-لا يوجد علامة واضحة في طلبات ajx من webix، العلامة في jquery.ajax هي x-requested-with، لذا قمت بمحاكاة علامة بـ requestFlag="webix" (يمكنك تعيين علامة تفضيلية)، وتعيينها باستخدام "onBeforeAjax"
webix.attachEvent("onBeforeAjax",function(s, t, e, a, o){o["requestFlag"]="webix"});
3-الاستماع إلى حالة الرد
webix.attachEvent("onAfterAjax",function(xhr){if(xhr.getResponseHeader("sessionstatus")=='timeout'){window.location.href='/webix/login.html'}});
4、كود الخلفية
4.1 كود الم拦截ور
package com.ljx.filter; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; public class UserInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) throws Exception { } @Override public void postHandle(HttpServletRequest arg0, HttpServletResponse response, Object arg2, ModelAndView arg3) throws Exception { response.sendRedirect("/webix/login.html"); } @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { Object obj = طلب الرأس().getAttribute("LOGIN"); إذا (null == obj) { // لم يتم تسجيل الدخول إذا (طلب الرأس "requestFlag" != null && طلب الرأس "requestFlag".equalsIgnoreCase( "webix")) { // إذا كان الطلبajax سيكون هناك رأس الطلب، requestFlag response.setHeader("sessionstatus", "timeout"); // إعداد حالة الجلسة في رأس الاستجابة } else { response.sendRedirect(request.getContextPath() + "/login"); } return false; } return true; } }
4.2 إضافة إعدادات التدخل إلى ملف تكوين spring
<mvc:interceptors> <mvc:interceptor> <mvc:mapping path="/mvc/*" /> <bean class="com.ljx.filter.UserInterceptor"></bean> </mvc:interceptor> </mvc:interceptors>
4.3 تنفيذ webix.ajax في صندوق التحكم F12 لرؤية التأثير
webix.ajax().get("/webix/mvc/login.action")
ما تم ذكره أعلاه هو ما قدمه المحرر للجميع حول webix + springmvc session timeout jump login page، آمل أن يكون هذا مفيدًا لكم، إذا كان لديكم أي أسئلة، فمرحبًا بترك تعليق، سأقوم بالرد على أسئلتكم في الوقت المناسب.
البيان: محتوى هذا المقال تم جمعه من الإنترنت، ملكية حقوق الطبع والنشر للمالك الأصلي، تم جمع المحتوى من قبل المستخدمين على الإنترنت بشكل تلقائي، هذا الموقع لا يمتلك حقوق الملكية، لم يتم تعديل المحتوى بشكل إنساني، ولا يتحمل أي مسؤولية قانونية. إذا اكتشفت أي محتوى يشتبه في حقوق الطبع والنشر، فمرحبًا بمراسلتنا عبر البريد الإلكتروني إلى: notice#oldtoolbag.com (يرجى استبدال # ب @ عند إرسال البريد الإلكتروني) لإبلاغنا، وقدم الأدلة ذات الصلة، إذا تم التحقق من صحة الشكوى، سيتم حذف المحتوى المزعوم فورًا.