Source: transport/JQueryTransport.js

'use strict';

/* global jQuery: false */

import Transport from './Transport.js';
import TransportError from '../errors/TransportError';

export default class JQueryTransport extends Transport {
  /**
   * A {@link Transport} implementation for [jQuery]{@link https://jquery.com/}.<br />
   * This class supposes that the `jQuery` global object is available.
   *
   * @constructor
   *
   * @param [promiseProvider=null] {PromiseProvider} A {@link PromiseProvider} implementation.
   *
   * @see Transport
   */
  constructor(promiseProvider) {
    super();

    this.promiseProvider = promiseProvider;
  }

  post(url, headers, data, raw) {
    return this.promiseProvider.newPromise(function(resolve, reject) {
      jQuery.ajax({
        url: url,
        method: 'POST',
        headers: headers,
        data: raw ? data : JSON.stringify(data),
        dataType: raw ? undefined : 'json',
        processData: false,
        jsonp: false
      })
        .done(resolve)
        .fail((xhr, statusText, err) => reject(new TransportError(err, xhr.status, xhr.responseText)));
    });
  }
}