2016-06-15 5 views
4

В моем приложении AngularJS отправлю HTTP-запрос GET, как показано ниже.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"); 

    }); 
} 

Прежде всего это правильный способ отправки запроса HTTP в AngularJS?
Проблема, с которой я столкнулся, иногда я получаю кэшированные данные как ответ, а HTTP-запрос не попадает на сервер. что может быть проблемой?

UPDATE

Согласно комментарий и ответ я обновил свой код запроса 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)); 
     } 
    ); 
} 
+0

Какой метод вы используете в своем методе HttpReq? ПОЛУЧИТЬ или ПОЧТОВИТЬ ... или оба? –

+0

Я использую как GET, так и POST – User7723337

+0

.success и .error устарели, вместо этого используйте 2 функции обратного вызова. – gyc

ответ

1

Просто добавьте кэша: ложный атрибут для объекта конфигурации.

https://docs.angularjs.org/api/ng/service/$http#caching

Также вы можете добавить заголовок: 'Cache-Control': 'нет-кэша'

+0

Пожалуйста, проверьте мой обновленный вопрос, я только что попробовал с кешем: false, но я все еще вижу кэшированные данные. – User7723337

+0

$ http не кэширует данные по умолчанию. – gyc

+0

Звонки, которые я делаю, находятся в последовательности, при успешном обратном вызове я посылаю другой запрос, это правильный путь? – User7723337

2

броузеры будут ловить Аякс получать запросы, даже если добавить заголовки управления кэша в ответ. Единственный способ, которым я решил решить проблему, - добавить в запрос некоторые случайные параметры. Пожалуйста, убедитесь, что у api нет проблем, даже если вы отправляете дополнительные параметры

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

OH! Я использую хром для тестирования, но все же я столкнулся с этой проблемой. – User7723337

+0

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

 Смежные вопросы

  • Нет связанных вопросов^_^