0

我有个问题。我正在发送一个 ajax 请求,并根据单击的链接获取数据以加载正确的结果。当我单击不同的链接并请求结果以反映该链接时。它保留上一个链接中的值。任何帮助将不胜感激。这就是我正在做的事情。这是我的ajax调用

$('body').on('click', 'button', function () {
    $.ajax({
        url: fullUrl,
        type: "GET",
        dataType: "json",
        ifModified: true,
        success: onDataReceived,
        error: onError//,
        // data: data
    });
});

现在,当我单击按钮时,我第一次获得了正确的值,但是当我单击不同的链接来更改其中一个值时,结果不会改变。就像它正在缓存结果一样。我尝试将缓存设置为 false,清除浏览器缓存现在可用。我究竟做错了什么

我的成功功能是这个

function onDataReceived(series) {
    // Push the new data onto our existing data array
    count = 0;
    for (var prop in series) {
        if (series.hasOwnProperty(prop))
            ++count;
    }
    for (i = 0; i < count; i++) {
        if (!alreadyFetched[series[i].label]) {
            data.push(series[i]);
        }
    }

    $.plot("#placeholder", data, options);
}
4

2 回答 2

0

向 URL 添加查询字符串,通常是当前时间,例如:

var time= new Date().getTime();
var path = 'http://hostname.domain.com/api?time=' + time;

这将确保 URL 每次都更改,因此理想情况下不会发生缓存

于 2013-08-23T18:20:29.293 回答
0

本地缓存禁用
最简单的方法也是最直观的方法是将cache: false参数添加到您的 ajax 调用中。

$('body').on('click','button',function() {
      $.ajax({
            url: fullUrl,
            type: "GET",
            dataType: "json",
            ifModified: true,
            success: onDataReceived,
            error: onError//,
            // data: data,
            cache: false
        });

     });

它完全按照 Farhan 所说的那样做,但它是内部的,所以它可能更容易记住,而且你想要完成的事情也更具可读性,这将有助于下一个开发人员或你自己,以便稍后找出你的代码。
在此处阅读有关 jquery-ajax 对象的更多信息:http
://api.jquery.com/jQuery.ajax/ -cache在页面上搜索。

全局缓存禁用
您也可以在全局范围内对整个页面执行此操作,但我不建议这样做。

但是如果你真的需要,把它放在页面加载事件中:

$(document).ready(function(){
      $.ajaxSetup({ cache: false });
      // ... Other init code
});

以前在这里问过一个全局问题:如何防止 jQuery Ajax 请求在 Internet Explorer 中缓存?

于 2013-08-23T18:24:53.977 回答