@@ -31,6 +31,7 @@ <h1 class="text-center mb-4">Extract text from documents</h1>
3131 </ form >
3232 </ div >
3333 </ div >
34+ < div id ="errorAlert " class ="alert alert-danger d-none " role ="alert "> This is an error</ div >
3435
3536 < div class ="mt-4 ">
3637 < h4 > Detected Text:</ h4 >
@@ -47,6 +48,7 @@ <h4>Detected Text:</h4>
4748 const form = document . getElementById ( 'ocrForm' ) ;
4849 const fileInput = document . getElementById ( 'fileInput' ) ;
4950 const resultText = document . getElementById ( 'resultText' ) ;
51+ const errorAlert = document . getElementById ( 'errorAlert' ) ;
5052
5153 let ocrMode = 'basic' ; // default
5254
@@ -60,6 +62,10 @@ <h4>Detected Text:</h4>
6062
6163 form . addEventListener ( 'submit' , async ( event ) => {
6264 event . preventDefault ( ) ;
65+ // Reset, hide previous alert
66+ errorAlert . classList . add ( 'd-none' ) ;
67+ errorAlert . textContent = '' ;
68+ resultText . textContent = 'Processing.....' ;
6369
6470 const file = fileInput . files [ 0 ] ;
6571 if ( ! file ) {
@@ -69,10 +75,12 @@ <h4>Detected Text:</h4>
6975
7076 const formData = new FormData ( ) ;
7177 formData . append ( 'attachment' , file ) ;
72- formData . append ( 'mode ' , ocrMode ) ;
78+ formData . append ( 'synchronous ' , false ) ;
7379
7480 resultText . textContent = 'Processing...' ;
7581 const BASE_URL = 'http://localhost:8000' ;
82+ let pollUrl ;
83+ let response ;
7684
7785 try {
7886 let url = "" ;
@@ -82,19 +90,44 @@ <h4>Detected Text:</h4>
8290 else {
8391 url = BASE_URL + "/textract-ocr"
8492 }
85- const response = await fetch ( url , {
93+ response = await fetch ( url , {
8694 method : 'POST' ,
8795 body : formData ,
8896 } ) ;
97+ const data = await response . json ( ) ;
8998
9099 if ( ! response . ok ) {
91- throw new Error ( 'Server error during OCR.' ) ;
100+ throw new Error ( data . detail ) ;
92101 }
93102
94- const data = await response . json ( ) ;
95- resultText . textContent = data . content || 'No text detected.' ;
103+ pollUrl = data . link ;
96104 } catch ( error ) {
97- resultText . textContent = 'Error: ' + error . message ;
105+ errorAlert . textContent = error . message ;
106+ errorAlert . classList . remove ( 'd-none' )
107+ resultText . textContent = '' ;
108+ }
109+ if ( response . ok ) {
110+ // Polling every 2 seconds
111+ const pollInterval = 2000 ;
112+
113+ const poll = setInterval ( async ( ) => {
114+ try {
115+ const pollResponse = await fetch ( pollUrl ) ;
116+ if ( ! pollResponse . ok ) throw new Error ( 'Polling error.' ) ;
117+
118+ const result = await pollResponse . json ( ) ;
119+
120+ if ( result . content !== null ) {
121+ clearInterval ( poll ) ;
122+ resultText . textContent = result . content ;
123+ }
124+ // If status is "pending", keep polling
125+
126+ } catch ( pollError ) {
127+ clearInterval ( poll ) ;
128+ resultText . textContent = 'Polling error: ' + pollError . message ;
129+ }
130+ } , pollInterval ) ;
98131 }
99132 } ) ;
100133 </ script >
0 commit comments