diff --git a/core/js/js.js b/core/js/js.js
index 67487ec979c4127a039a6bb4545596540c985740..4b09cc49038b95c82d1c87536393579ca7dca5b6 100644
--- a/core/js/js.js
+++ b/core/js/js.js
@@ -729,6 +729,17 @@ var OC={
 		return oc_isadmin;
 	},
 
+	/**
+	 * Warn users that the connection to the server was lost temporarily
+	 *
+	 * This function is throttled to prevent stacked notfications.
+	 * After 7sec the first notification is gone, then we can show another one
+	 * if necessary.
+	 */
+	_ajaxConnectionLostHandler: _.throttle(function() {
+		OC.Notification.showTemporary(t('core', 'Connection to server lost'));
+	}, 7 * 1000, {trailing: false}),
+
 	/**
 	 * Process ajax error, redirects to main page
 	 * if an error/auth error status was returned.
@@ -742,7 +753,7 @@ var OC={
 			return;
 		}
 
-		if (_.contains([0, 302, 303, 307, 401], xhr.status)) {
+		if (_.contains([302, 303, 307, 401], xhr.status)) {
 			// sometimes "beforeunload" happens later, so need to defer the reload a bit
 			setTimeout(function() {
 				if (!self._userIsNavigatingAway && !self._reloadCalled) {
@@ -752,6 +763,13 @@ var OC={
 					self._reloadCalled = true;
 				}
 			}, 100);
+		} else if(xhr.status === 0) {
+			// Connection lost (e.g. WiFi disconnected or server is down)
+			setTimeout(function() {
+				if (!self._userIsNavigatingAway && !self._reloadCalled) {
+					self._ajaxConnectionLostHandler();
+				}
+			}, 100);
 		}
 	},
 
diff --git a/core/js/tests/specs/coreSpec.js b/core/js/tests/specs/coreSpec.js
index 1ffe7b38a40bc04a747466e02e06dd634822f6fb..01a0e6acb6f4e0923820ed4d2ee13a2b7bebf28a 100644
--- a/core/js/tests/specs/coreSpec.js
+++ b/core/js/tests/specs/coreSpec.js
@@ -924,7 +924,7 @@ describe('Core base tests', function() {
 			var dataProvider = [
 				[200, false],
 				[400, false],
-				[0, true],
+				[0, false],
 				[401, true],
 				[302, true],
 				[303, true],
@@ -979,5 +979,14 @@ describe('Core base tests', function() {
 			clock.tick(waitTimeMs);
 			expect(notificationStub.calledOnce).toEqual(true);
 		});
+		it('shows a temporary notification if the connection is lost', function() {
+			var xhr = { status: 0 };
+			spyOn(OC, '_ajaxConnectionLostHandler');
+
+			$(document).trigger(new $.Event('ajaxError'), xhr);
+			clock.tick(101);
+
+			expect(OC._ajaxConnectionLostHandler.calls.count()).toBe(1);
+		});
 	});
 });