【问题标题】:JQuery .html() function seems to cache unecessarily in IEJQuery .html() 函数似乎在 IE 中不必要地缓存
【发布时间】:2013-06-11 02:20:53
【问题描述】:

我的 MVC 程序在使用 IE 运行时遇到了这个小问题:

我有一个 JQuery 函数,它转到控制器以获取部分视图,该部分视图被加载到目标 <div> 元素中。

function editSkills(projectId, roleId) {
    $.get('../../Project/EditSkills?projectID=' + projectId + '&roleID=' + roleId, function (data) {
        $('#infoPanel').html(data);
    });
}

Controller 中的EditSkills() 函数:

public virtual ActionResult EditSkills(int projectID, int roleID)
{
    //various pieces of logic

    return PartialView("EditSkills");
}

第一次调用该函数时似乎可以正常工作,但随后的调用会立即返回相同的信息,即使基础数据已被修改。

我怀疑这是一个缓存问题(因为据说 IE 这样做过分热心)。因为它在 Chrome 等中运行良好。

在这种情况下是否有任何选项可以防止缓存?

【问题讨论】:

  • 这不是 .html 函数的问题...

标签: c# jquery internet-explorer caching partial-views


【解决方案1】:

试试下面的

function editSkills(projectId, roleId) {
 $.ajax({
        url: '../../Project/EditSkills?projectID=' + projectId + '&roleID=' +    roleId,
        type: "GET",
        cache: false,
        data: 'html',
        success: function (data) {
             $('#infoPanel').html(data);
        }
    });

}      

【讨论】:

  • 可能值得一提的是,这种缓存清除是通过向查询字符串添加(不断变化的)参数来实现的,这样 url 是唯一的,并且它的资源被浏览器视为不同的。来自文档:“它通过将“_={timestamp}”附加到 GET 参数来工作。”
  • 有效。喜欢。一个梦!谢谢!
【解决方案2】:

您正在使用 $.get,因此是缓存。它在内部使用 $.ajax,你应该使用它与 cache:false 以避免缓存。

如果您坚持使用$.get,请附加一些随机数来获取参数,以避免在所有浏览器中缓存。

【讨论】:

    【解决方案3】:

    我认为使用 $.ajax 代替 get 会更好($.get 是 $.ajax 的简写)。在 ajax 方法中,您可以将“缓存”参数设置为 false。像这样的:

    function editSkills(projectId, roleId) {
      $.ajax({
        url:'../../Project/EditSkills?projectID=' + projectId + '&roleID=' + roleId,
        type:'GET',
        cache:false,
        success: function (data, textStatus, jqXHR) {
          $('#infoPanel').html(data);
        }
      });
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-09-06
      • 1970-01-01
      • 2021-12-27
      • 2018-09-03
      • 2023-04-02
      相关资源
      最近更新 更多