@@ -20,6 +20,8 @@ interface Params {
2020 MinChars : number ;
2121 QueryArg : string ;
2222 Url : string ;
23+ RequestTimeout : number ;
24+ MaxTimeoutRetries : number ;
2325
2426 // Keyboard mapping event
2527 KeyboardMappings : { [ _ : string ] : MappingEvent } ;
@@ -125,6 +127,8 @@ class AutoComplete {
125127 HttpMethod : "GET" ,
126128 QueryArg : "q" ,
127129 Url : null ,
130+ RequestTimeout : undefined ,
131+ MaxTimeoutRetries : 3 ,
128132
129133 KeyboardMappings : {
130134 "Enter" : {
@@ -608,7 +612,7 @@ class AutoComplete {
608612 }
609613 }
610614
611- makeRequest ( params : Params , callback : any , callbackErr : any ) : XMLHttpRequest {
615+ makeRequest ( params : Params , callback : any , callbackErr : any , retryNumber : number ) : XMLHttpRequest {
612616 var propertyHttpHeaders : string [ ] = Object . getOwnPropertyNames ( params . HttpHeaders ) ,
613617 request : XMLHttpRequest = new XMLHttpRequest ( ) ,
614618 method : string = params . _HttpMethod ( ) ,
@@ -625,6 +629,9 @@ class AutoComplete {
625629 }
626630
627631 request . open ( method , url , true ) ;
632+
633+ if ( params . RequestTimeout && ( retryNumber <= params . MaxTimeoutRetries ) )
634+ request . timeout = params . RequestTimeout ;
628635
629636 for ( var i = propertyHttpHeaders . length - 1 ; i >= 0 ; i -- ) {
630637 request . setRequestHeader ( propertyHttpHeaders [ i ] , params . HttpHeaders [ propertyHttpHeaders [ i ] ] ) ;
@@ -639,6 +646,11 @@ class AutoComplete {
639646 callbackErr ( ) ;
640647 }
641648 } ;
649+
650+ request . ontimeout = function ( ) {
651+ var retryRequest = AutoComplete . prototype . makeRequest ( params , callback , callbackErr , ++ retryNumber ) ;
652+ AutoComplete . prototype . ajax ( params , retryRequest , false ) ;
653+ } ;
642654
643655 return request ;
644656 }
@@ -664,7 +676,7 @@ class AutoComplete {
664676 var response : string | undefined = params . _Cache ( params . _Pre ( ) ) ;
665677
666678 if ( response === undefined ) {
667- var request : XMLHttpRequest = AutoComplete . prototype . makeRequest ( params , callback , callbackErr ) ;
679+ var request : XMLHttpRequest = AutoComplete . prototype . makeRequest ( params , callback , callbackErr , 0 ) ;
668680
669681 AutoComplete . prototype . ajax ( params , request ) ;
670682 } else {
0 commit comments