2015-10-13 4 views
0

У меня есть коды, в которых содержится призыв к серверу, чтобы получить JSON, а затем генерирует HTML и вставляет его в тело тега:Частичное кэширование HTML

$.ajax({ 
    url: '/myController/myJsonMethod', 
    type: 'POST', 
    data: JSON.stringify(requestData), 
    dataType: 'json', 
    contentType: 'application/json; charset=utf-8', 
    error: function (xhr) { 
     alert('Error: ' + xhr.statusText); 
    }, 
    success: function (result) { 
     var myHTML='<div>'+result.text+'</div>'+..... 
     $("body").append(myHTML); 
    }, 
    async: true, 
    processData: false 
    }); 

Этот код в основном статичны. Значение json-результата меняется пару раз в год. Есть ли способ кэшировать эту html-часть страницы?

+0

Если вы используете HTML5, вы можете воспользоваться локальным хранилищем – geo

ответ

0

Кэширование сгенерированного HTML вряд ли имеет смысл, так как оно тривиально. То, что делает, имеет смысл кэшировать фактический запрос ajax, который является обычным HTTP-запросом.

Для этого вы, обычные точки, применяете контрольное кэширование результатов запроса. На самом деле поведение по умолчанию заключается в том, что такие результаты являются кешами, если только вы не приняли специальные меры предосторожности, чтобы предотвратить это. Взгляните на заголовки http, которые вы отправляете первым.

Однако есть одна проблема с такой стратегией: даже если результат запроса изменяется редко, все же вы должны учитывать, что на самом деле происходит в этом случае: если вы кешируете запрос, то клиент не сможет увидеть изменение до тех пор, пока кеш устарел.

+0

Привет, для статических файлов я обычно добавляю заголовок, срок действия которого истекает через 20 лет. Когда изменяются статические файлы, я переименую его. Это лучший вариант. Для вызова ajax это невозможно, если я не изменю имя моего метода контроллера для каждого изменения. Но это уродливо, так как требует восстановления, ... Итак, я думал использовать параметр eTag, но каждый раз он создает клиентские запросы. я думаю, нет другого пути. – Simon