2014-12-03 2 views
10

Я делаю вызов ajax, используя $ http в угловых js. Я использовал тайм-аут в нем. Но я хочу показать пользователю сообщение об ошибке, если время соединения заканчивается. Ниже приведен код.

$http({ 
      method: 'POST', 
      url: 'Link to be called', 
      data: $.param({ 
        key:Apikey, 
        id:cpnId 
       }), 
      timeout : 5000, 
      headers: {'Content-Type': 'application/x-www-form-urlencoded'} 
      }).success(function(result){ 
       alert(result); 
      }).error(function(data){ 
       alert(data); 
      }); 

Есть ли способ, чтобы я мог отображать пользователя, если время соединения завершено. Есть ли способ, чтобы его можно было настроить в одном месте?

ответ

19

И если вы хотите сделать коснуться, когда тайм-аут подключения для каждый запрос, вы можете использовать перехватчики (глобальный тайм-аут не работает):

// loading for each http request 
app.config(function ($httpProvider) { 
    $httpProvider.interceptors.push(function ($rootScope, $q) { 
     return { 
      request: function (config) { 
       config.timeout = 1000; 
       return config; 
      }, 
      responseError: function (rejection) { 
       switch (rejection.status){ 
        case 408 : 
         console.log('connection timed out'); 
         break; 
       } 
       return $q.reject(rejection); 
      } 
     } 
    }) 
}) 
+0

Привет, у меня есть rejection.status == 0, когда время ожидания запроса и другой статус сетевой ошибки также 0 – Raniys

+2

с использованием углового 1.5.11. Я получаю код состояния -1, любая идея, где я могу найти официальную документацию по этому значению? – Rachmaninoff

1

Попробуйте на этой странице блога: http://www.jonhartmann.com/index.cfm/2014/7/23/jsFiddle-Example-Proper-Timeout-Handling-with-AngularJS У этого есть полный пример углового пробега, который разрешает ваш вопрос.

+5

лучше, чтобы дать какое-то объяснение и предоставить ссылку для получения дополнительной информации. Таким образом, это будет полезно, если ссылка не работает. –

+1

Это не очень хороший пример, потому что устанавливает timedOut в коде вызывающего абонента, все еще не знает, как определить, когда произошел настоящий тайм-аут http. – user3285954

+1

Это хороший ответ. Угловой тайм-аут ищет, всегда ссылается на код вызывающего абонента, поэтому я не знаю, о чем говорит @ user3285954. Этот пример демонстрирует использование обещания как значения тайм-аута, где вы можете вставить дополнительные данные для отслеживания того, с какой тайм-аут сработал. Ницца. – JoshuaDavid

-2

Вам просто нужно проверить состояние ответа и это все:

}).error(function(data, status, header, config) { 
     if (status === 408) { 
      console.log("Error - " + status + ", Response Timeout."); 
     } 

}); 

Для глобального тайм-аута HTTP, посмотрите на эту answer

+1

Это не очень хороший ответ. Откуда вы получаете 408? Вы не можете предположить, что таймаут приведет к статусу доставки, то есть статус может быть 0. – JoshuaDavid

+1

Это неправильный ответ. Код состояния НЕ будет равен 408. –

1

Для достижения этого вы можете использовать угловой перехватчик.

$httpProvider.responseInterceptors 
.push(['$q', '$injector','$rootScope', function ($q, $injector,$rootScope) { 
return function (promise) { 
    return promise.then(function (response) { 
     return response; 
    }, function (response) { 
     console.log(response); // response status 
     return $q.reject(response); 
    }); 
    }; 
}]); 
}]); 

More info see this link

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