UNPKG

five-bells-visualization

Version:
117 lines (103 loc) 3.84 kB
<!-- Copyright (c) 2014 The Polymer Project Authors. All rights reserved. This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt Code distributed by Google as part of the polymer project is also subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt --> <!-- /** * @group Polymer Core Elements * * core-xhr can be used to perform XMLHttpRequests. * * <core-xhr id="xhr"></core-xhr> * ... * this.$.xhr.request({url: url, params: params, callback: callback}); * * @element core-xhr */ --> <link rel="import" href="../polymer/polymer.html"> <polymer-element name="core-xhr" hidden> <script> Polymer('core-xhr', { /** * Sends a HTTP request to the server and returns the XHR object. * * @method request * @param {Object} inOptions * @param {String} inOptions.url The url to which the request is sent. * @param {String} inOptions.method The HTTP method to use, default is GET. * @param {boolean} inOptions.sync By default, all requests are sent asynchronously. To send synchronous requests, set to true. * @param {Object} inOptions.params Data to be sent to the server. * @param {Object} inOptions.body The content for the request body for POST method. * @param {Object} inOptions.headers HTTP request headers. * @param {String} inOptions.responseType The response type. Default is 'text'. * @param {boolean} inOptions.withCredentials Whether or not to send credentials on the request. Default is false. * @param {Object} inOptions.callback Called when request is completed. * @returns {Object} XHR object. */ request: function(options) { var xhr = new XMLHttpRequest(); var url = options.url; var method = options.method || 'GET'; var async = !options.sync; // var params = this.toQueryString(options.params); if (params && method.toUpperCase() == 'GET') { url += (url.indexOf('?') > 0 ? '&' : '?') + params; } var xhrParams = this.isBodyMethod(method) ? (options.body || params) : null; // xhr.open(method, url, async); if (options.responseType) { xhr.responseType = options.responseType; } if (options.withCredentials) { xhr.withCredentials = true; } this.makeReadyStateHandler(xhr, options.callback); this.setRequestHeaders(xhr, options.headers); xhr.send(xhrParams); if (!async) { xhr.onreadystatechange(xhr); } return xhr; }, toQueryString: function(params) { var r = []; for (var n in params) { var v = params[n]; n = encodeURIComponent(n); r.push(v == null ? n : (n + '=' + encodeURIComponent(v))); } return r.join('&'); }, isBodyMethod: function(method) { return this.bodyMethods[(method || '').toUpperCase()]; }, bodyMethods: { POST: 1, PUT: 1, PATCH: 1, DELETE: 1 }, makeReadyStateHandler: function(xhr, callback) { xhr.onreadystatechange = function() { if (xhr.readyState == 4) { callback && callback.call(null, xhr.response, xhr); } }; }, setRequestHeaders: function(xhr, headers) { if (headers) { for (var name in headers) { xhr.setRequestHeader(name, headers[name]); } } } }); </script> </polymer-element>