http Post request with Typescript http Post request with Typescript typescript typescript

http Post request with Typescript


Update 2020:

Note that as of now, the global fetch is available on all modern browsers and covers 95% of all web users. If you need support for IE, read the original answer.

MDN Doc | TypeScript Definition

Where the function is available in the window or global contexts, looks like:

    fetch(input: RequestInfo, init?: RequestInit): Promise<Response>;

so you can do:

const response = await fetch(myUrl, {  method: 'POST',  body: content,  headers: {'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'} });if (!response.ok) { /* Handle */ }// If you care about a response:if (response.body !== null) {  // body is ReadableStream<Uint8Array>  // parse as needed, e.g. reading directly, or  const asString = new TextDecoder("utf-8").decode(response.body);  // and further:  const asJSON = JSON.parse(asString);  // implicitly 'any', make sure to verify type on runtime.}

Original Answer:

If you want to use native JavaScript functions in TypeScript for your HTTP POST request, take a look at the JSON and POST examples on YouMightNotNeedJQuery.com. Using that, you can implement your own:

// Using callbacks:function request<Request, Response>(        method: 'GET' | 'POST',        url: string,        content?: Request,        callback?: (response: Response) => void,        errorCallback?: (err: any) => void) {    const request = new XMLHttpRequest();    request.open(method, url, true);    request.onload = function () {        if (this.status >= 200 && this.status < 400) {            // Success!            const data = JSON.parse(this.response) as Response;            callback && callback(data);        } else {            // We reached our target server, but it returned an error        }    };    request.onerror = function (err) {        // There was a connection error of some sort        errorCallback && errorCallback(err);    };    if (method === 'POST') {        request.setRequestHeader(            'Content-Type',            'application/x-www-form-urlencoded; charset=UTF-8');    }    request.send(content);}// Using promises:function request2<Request, Response>(    method: 'GET' | 'POST',    url: string,    content?: Request): Promise<Response> {    return new Promise<Response>((resolve, reject) => {        request(method, url, content, resolve, reject);    });}

XMLHttpRequest is a built-in JavaScript class and included in the TypeScript typings.


Here is my very simple example to call GET or POST with Typescript only.

//-------------------------------------------------// Simple function to GET or POSTfunction httpCall(method: string, url:string, data:any, callback:(result:any)=>any) {    var xhr = new XMLHttpRequest();    xhr.open(method, url, true);    if (callback) xhr.onload = function() { callback(JSON.parse(this['responseText'])); };    if (data != null) {        xhr.setRequestHeader('Content-Type', 'application/json');        xhr.send(JSON.stringify(data));    }    else xhr.send();}

Optional input data (the post body) and callback. The data and result are both assumed to be JSON.


Sending form data.

Save(model: yourmodalarray[]): Observable<any> {        var formData: FormData = new FormData();        formData.append('id', ''); const headers = new Headers({            'Accept': 'application/json',            'enctype': 'multipart/form-data'        });        const options = new RequestOptions({ headers: headers });        return this._http            .post(this._baseUrl + 'Save', formData, options)            .map(res => <any>res.json())            .catch(this.handleError);    }