AngularJS HTTP GET请求返回缓存数据

5
在我的AngularJS应用程序中,我发送HTTP GET请求如下。
MyService.HttpReq("testUrl", "GET", null);

HttpReq 方法在一个服务中定义,并实现如下:

this.HttpReq = function(URL, method, payload)
{
    $http({
        url: URL,
        method: method,
        cache: false,
        data: postData,
        headers: {
            'Content-Type': 'application/json',
        }
    }).success(function(response)
    {
        console.log("Success: "+JSON.stringify(response));

    }).error(function(data, status)
    {
       console.error("Error");

    });
}

首先,这是在AngularJS中发送HTTP请求的正确方式吗?

我面临的问题是,有时我会得到缓存的数据作为响应,并且HTTP请求没有命中服务器。可能是什么问题?

更新

根据评论和答案,我已更新了我的HTTP请求代码如下,但仍然遇到同样的问题。

this.HttpReq = function(URL, method, payload)
{
    $http({
        url: URL, 
        method: method, 
        cache: false,
        data: payload,
        headers: {
            'Content-Type': 'application/json',
            'Cache-Control' : 'no-cache'
        }
    }).
    then(
        function(response) 
        {
            var data = response.data;
            console.log("Success: "+JSON.stringify(data));
        }, 
        function(response) 
        {
            var data = response.data || "Request failed";
            var status = response.status;
            console.error("Error: "+JSON.stringify(data));
        }
    );
}

你在 HttpReq 方法中使用什么方法?GET、POST 还是两者都用? - Marcus Höglund
我同时使用GET和POST。 - User7723337
.success和.error已经被弃用,请使用两个回调函数代替。 - gyc
你能演示一下如何使用吗? - User7723337
1
从技术上讲,这是可行的。使用关键字“angular promise chaining”应该会得到一些结果。通常我们尽量少调用API。在一个“真正”的应用程序中,您需要更改API以便在一个请求中返回所有所需的数据。 - gyc
显示剩余4条评论
2个回答

2

即使我们在响应中添加缓存控制头,IE浏览器仍会捕获ajax get请求。我发现解决这个问题的唯一方法是向请求添加一些随机参数。请确保API即使发送额外参数也没有问题。

 MyService.HttpReq("testUrl?ts=" + Date.now(), "GET", null);

哦!我正在使用 Chrome 进行测试,但仍然遇到了这个问题。 - User7723337
将缓存控制头添加到请求中是没有用的。它应该在服务器端设置为响应头。请尝试添加一个随机参数,如我所示的时间戳示例。这样应该可以工作。 - shams.kool

1

请检查我的更新问题,我刚刚尝试了cache: false,但我仍然看到缓存的数据。 - User7723337
$http默认不会缓存数据。 - gyc
我正在按顺序进行调用,在一个回调成功后,我会发送另一个请求,这样做是否正确? - User7723337
另外,您可以添加标题:'Cache-Control':'no-cache'。 - Constantine
@A_user 文档底部关于 $http 的示例是拥有通用函数的正确方式。 - gyc
我已经更新了我的问题,我正在以相同的方式使用$http调用。 - User7723337

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接