@@ -81,4 +81,73 @@ export class JsonService {
81
81
req . send ( ) ;
82
82
} ) ;
83
83
}
84
+
85
+ postForm ( url , payload ) {
86
+ if ( ! url ) {
87
+ Log . error ( "JsonService.postForm: No url passed" ) ;
88
+ throw new Error ( "url" ) ;
89
+ }
90
+
91
+ Log . debug ( "JsonService.postForm, url: " , url ) ;
92
+
93
+ return new Promise ( ( resolve , reject ) => {
94
+
95
+ var req = new this . _XMLHttpRequest ( ) ;
96
+ req . open ( 'POST' , url ) ;
97
+
98
+ var allowedContentTypes = this . _contentTypes ;
99
+
100
+ req . onload = function ( ) {
101
+ Log . debug ( "JsonService.postForm: HTTP response received, status" , req . status ) ;
102
+
103
+ if ( req . status === 200 ) {
104
+
105
+ var contentType = req . getResponseHeader ( "Content-Type" ) ;
106
+ if ( contentType ) {
107
+
108
+ var found = allowedContentTypes . find ( item => {
109
+ if ( contentType . startsWith ( item ) ) {
110
+ return true ;
111
+ }
112
+ } ) ;
113
+
114
+ if ( found ) {
115
+ try {
116
+ resolve ( JSON . parse ( req . responseText ) ) ;
117
+ return ;
118
+ }
119
+ catch ( e ) {
120
+ Log . error ( "JsonService.postForm: Error parsing JSON response" , e . message ) ;
121
+ reject ( e ) ;
122
+ return ;
123
+ }
124
+ }
125
+ }
126
+
127
+ reject ( Error ( "Invalid response Content-Type: " + contentType + ", from URL: " + url ) ) ;
128
+ }
129
+ else {
130
+ reject ( Error ( req . statusText + " (" + req . status + ")" ) ) ;
131
+ }
132
+ } ;
133
+
134
+ req . onerror = function ( ) {
135
+ Log . error ( "JsonService.postForm: network error" ) ;
136
+ reject ( Error ( "Network Error" ) ) ;
137
+ } ;
138
+
139
+ let body = "" ;
140
+ for ( let key in payload ) {
141
+ if ( body . length > 0 ) {
142
+ body += "&" ;
143
+ }
144
+ body += encodeURIComponent ( key ) ;
145
+ body += "=" ;
146
+ body += encodeURIComponent ( payload [ key ] ) ;
147
+ }
148
+
149
+ req . setRequestHeader ( "Content-Type" , "application/x-www-form-urlencoded" ) ;
150
+ req . send ( body ) ;
151
+ } ) ;
152
+ }
84
153
}
0 commit comments