Caching in IE

21 ביוני 2012

2 תגובות

                                                                                                                                                                                                                   Jquery ajax in IE

הבעיה:

באחד מהפרוייקטים שעשיתי לאחרונה נתקלתי בתופעה מעניינת. הפרוייקט בנוי Asp.net MVC ומציג דף עם שורות להזנה. המשתמש יכול להוסיף שורה והקריאה להוספת השורה מתבצעת ב – AJAX. כך נראה הדף

והנה הקוד שמוסיף שורה

function createNewRow() {

    var rows = $('#forecastTbl tr').length;

    $.getJSON(portal.variables.forecastPage + "/CreateNewForecast?rows=" + rows, null, function (data) {

        if (data != "")

            $('#forecastTbl tbody:last').append(data);

        else {

            alert("You can not insert a new row");

        }

    });

}

קוד רגיל לחלוטין שהולך ל – Controler להביא Data. וכאן התחילו לקרות דברים מוזרים מתברר שב IE אחרי הפעם הראשונה שהוא הוסיף שורה הקריאה לא הלכה יותר לשרת אלא כל פעם הדפדפן היה מביא את הקריאה מה – Cache וכך קרה שאפילו שה – Seesion השתנה ו – User אחר עבד על אותה המכונה כשהוא היה לוחץ Add Line הוא היה מקבל את השורה של המשתמש הקודם.

תחקור קצר ב – Fiddler העלה שאכן לא מתבצעת קריאה לשרת. שימוש בכלי הפיתוח של IE מראה שה – Response הוא 304 מה שאומר שאכן הדפדפן לוקח את השורה מה – Cache ולא הולך לשרת. 

Chrome מתנהג אחרת ולא שומר ב – Cache.

פתרון:

הפתרון לבעיה הוא להגדיר ב – Response הראשון HttpHeader כדי שהדפדפן לא ישמור ב - Cache.

this.Response.AddHeader("Cache-Control", "max-age=0,no-cache,no-store");

            return this.Json(result.ToString(), JsonRequestBehavior.AllowGet);

עכשיו הדפדפן מתנהג כמו שצריך.

בהצלחה :)  

הוסף תגובה
facebook linkedin twitter email

כתיבת תגובה

האימייל לא יוצג באתר. (*) שדות חובה מסומנים

2 תגובות

  1. יקיר24 ביוני 2012 ב 1:00

    אפשר פשוט להגיד ל JQUERY שידאג לבצע את הבקשה
    לפרטים נוספים…
    http://stackoverflow.com/questions/168963/stop-jquery-load-response-from-being-cached

    להגיב
  2. Dovi Perla24 ביוני 2012 ב 9:36

    זה לא עבד בדרך שהצעת.

    להגיב