如何确保始终进行ajax调用(不从缓存中获取)

时间:2014-02-04 01:37:01

标签: javascript jquery

我有以下代码。该函数被多次调用,具体取决于用户选中或取消选中复选框。

这适用于IE10 / 11以外的所有浏览器。在IE中,ajax调用仅针对特定ID进行一次。后续调用实际上并未发送到服务器,但似乎是从缓存中提取的。

在F12开发人员工具中,似乎正在向服务器发出呼叫,但Fiddler表明它实际上并未发生。

F12还显示对该呼叫的304响应。

如何确保始终对服务器进行呼叫?

function updateReportTypes(event) {
    var value = event.currentTarget.value;

    if (event.currentTarget.checked) {

        $.ajax({
            url: "/PropertySearch/Order/AddReportType?id=" + value,
            dataType: 'html',
            success: function (data) {
                $('#reportTypes').html(data);
                hideProgress();
            }
        });
    }
    else {
                    $.ajax({
            url: "/PropertySearch/Order/RemoveReportType?id=" + value,
            dataType: 'html',
            success: function (data) {
                $('#reportTypes').html(data);
                hideProgress();
            }
        });
    }


}

2 个答案:

答案 0 :(得分:1)

简单设置:

cache: false

$.ajax()的参数。当你这样做时,jQuery会自动在URL上添加一个唯一的参数,以防止任何缓存请求。

使用该选项将如下所示:

$.ajax({
     url: "/PropertySearch/Order/AddReportType?id=" + value,
     dataType: 'html',
     cache: false,
     success: function (data) {
         $('#reportTypes').html(data);
         hideProgress();
     }
});

关于此选项的jQuery doc:http://api.jquery.com/jquery.ajax/

答案 1 :(得分:0)

我不熟悉这个特定问题,但是如果其他所有问题都失败了,您应该能够添加动态缓存破坏值(例如时间戳),以使您的网址唯一:

 url: "/PropertySearch/Order/RemoveReportType?id=" + value + "&" + Date.now().toString()