سؤال

لدي طلب في معظم الطلبات المقدمة عبر اياكس, على الرغم من أن بعض تقدم عبر "العادية" طلبات HTTP.إذا طلب مقدم و المستخدم الدورة انتهت مهلة التالية سلمان هو عاد:

{"authentication":"required"}

إن وظيفة جافا سكريبت التي تقدم جميع طلبات اياكس يعالج هذا الرد من خلال عرض رسالة منبثقة وإعادة توجيه المستخدم إلى صفحة تسجيل الدخول.

ومع ذلك ، عندما يكون من غير طلب اياكس يتلقى هذا الرد سلمان ببساطة هو مبين في المتصفح لأن الاستجابة تتم مباشرة عن طريق المتصفح (أيالمذكور وظيفة جافا سكريبت يتم تجاوز).ومن الواضح أن هذه ليست مثالية وأود غير طلبات اياكس التي تتلقى هذا الرد تتصرف نفس طلبات اياكس.من أجل تحقيق هذا, لا أستطيع التفكير 2 خيارات:

  1. تذهب من خلال تطبيق تحويل جميع طلبات طلبات اياكس.هذا العمل من شأنه ، ولكن يمكن أيضا أن تأخذ وقت طويل!

  2. سلمان هو مبين أعلاه يتم إنشاؤها بواسطة بسيط جدا JSP.أنا أتساءل إذا كان من الممكن إضافة جافا سكريبت معالج الحدث هذا JSP الذي يدار من قبل يتم عرض المحتوى في المتصفح - أفترض أن هذا لن يكون دعا اياكس طلبات ؟ هذا المعالج يمكن أن نسميه أخرى شفرة جافا سكريبت التي تعرض المنبثقة و يؤدي إعادة توجيه.

إذا كان أي شخص يعرف بالضبط كيف يمكنني تنفيذ معالج لقد ورد في (2) أو أي حلول أخرى محتملة, وسأكون ممتنا للغاية إذا كنت تمر عليهم.

الهتافات ، لا

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

المحلول

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

هناك اثنين من الخيارات التي لا يمكن أن نرى:إضافة معلمة إلى الصفحة عن طريق إضافة عنوان URL إلى الشاشة التي يعدل الإخراج.

URL: http://domain/page.jsp?ajaxRequest=true سيكون الناتج سلمان فقط

URL: http://domain/page.jsp أن عرض صفحة jsp يمكن أن الأمام إلى صفحة أخرى.

أو

تغيير الاستجابة إلى توجيه التعليمات البرمجية في JSP التي سوف تحصل على تنفيذها من خلال متصفح الإنترنت إذا كان ضرب مباشرة.ثم يكون الاتصال اياكس إلى قطاع الشحن رمز ، ومن ثم معالجة ما تبقى.

نصائح أخرى

3) تغيير إعدادات اياكس رمز لإضافة متغير إلى GET أو POST: outputJson=1

4) تقرأ على 'قبول' طلب HTTP.

ثم على جانب الملقم خياط الإخراج:

على سبيل المثال

if(Accept contains application/json...) { // client asking for json, likely  to be XHR
  return {"foo":"bar"}
} else { // other
  return "Location: /login-please";
}

تبدأ مع ذكاء رسالة خطأ مثل هذا:

{"error":"authentication required"}

لف سلمان الانتاج في الاستدعاء:

errorHandler({"error":"authentication required"});

لديك معالج الانتظار في البرنامج النصي الخاص بك:

function errorHandler(r) {
   alert(r.error);
}

و لا تنسى أن ترسل عليه كما text/javascript و لا application/x-json.

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