2014-04-07 155 views
3

嘗試取消搜索輸入框上的$ http請求,但先前的請求似乎不會中止。我遵循其他堆棧溢出問題的例子。這裏是我的JS代碼:

var canceler; 
$scope.someFunction = function() { 
     if(canceler) 
     canceler.resolve(); 
     canceler = $q.defer(); 
     $http({method: 'GET', url: service+url, timeout: canceler.promise}). 
      success(function(data, status, headers, config) { }); 
} 

HTML:

<input ng-change="someFunction" /> 

如果我輸入兩個字符的搜索框中的函數被調用兩次,但初始請求仍能通過。因此,這兩個請求最終都會經過並等待響應時間的隨機響應正被使用。圖書館在某個時候是否改變了?我以前曾經工作過,但現在不再工作了。

+4

我認爲你的方法是不正確的,你不應該發送垃圾郵件你的服務器,並在輸入改變時取消請求。相反,當用戶停止輸入時(例如,當輸入改變時,設置一個200ms的超時時間來聯繫服務器,每當輸入改變清除超時並創建一個新的時間),就會發生超時併發送請求 - 這就是通常的做法。 – MMM

+0

MMM是對的,但這應該仍然按預期工作(即使這不是一個好習慣)。 – gkalpak

+0

我會改變我的方法,然後看看是否能解決我遇到的問題。 – user1200387

回答