| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 |
- //= require amcharts/util
- //= require amcharts/ajax/response
- //= require_self
- AmCharts.RB.Ajax.Request = AmCharts.RB.Util.Class.create({
- response: null,
- initialize: function(url, params, method, on_state_change)
- {
- this.transport = this.get_transport();
- this.url = url;
- this.method = method ? method.toUpperCase() : 'GET';
- this.params = AmCharts.isString(params) ? params : AmCharts.RB.Util.to_query_string(params);
- if (this.method != 'GET' && this.method != 'POST') {
- // simulate other verbs over post
- this.params += (this.params ? '&' : '') + "_method=" + this.method;
- this.method = 'POST';
- }
- if (this.params && this.method === 'GET') {
- // when GET, append parameters to URL
- this.url += (this.url.indexOf('?') > -1 ? '&' : '?') + this.params;
- }
- this.transport.open(this.method.toUpperCase(), this.url, true);
- this.response = new AmCharts.RB.Ajax.Response(this.transport);
- if (on_state_change && AmCharts.RB.Util.is_function(on_state_change)) {
- this.transport.onreadystatechange = on_state_change;
- }
- this.set_request_headers();
- this.transport.send(this.method === 'POST' ? this.params : null);
- },
- get_transport: function()
- {
- return AmCharts.RB.Util.try_these(
- function() {return new XMLHttpRequest()},
- function() {return new ActiveXObject('Msxml2.XMLHTTP')},
- function() {return new ActiveXObject('Microsoft.XMLHTTP')}
- ) || false;
- },
- set_request_headers: function()
- {
- var headers = {
- 'X-Requested-With': 'XMLHttpRequest',
- 'Accept': 'text/javascript, text/html, application/xml, text/xml, */*'
- };
- if (this.method == 'POST')
- {
- headers['Content-type'] = "application/x-www-form-urlencoded; charset=UTF-8";
- /* Force "Connection: close" for older Mozilla browsers to work
- * around a bug where XMLHttpRequest sends an incorrect
- * Content-length header. See Mozilla Bugzilla #246651.
- */
- if (this.transport.overrideMimeType && (navigator.userAgent.match(/Gecko\/(\d{4})/) || [0,2005])[1] < 2005)
- headers['Connection'] = 'close';
- }
- for (var name in headers) {
- this.transport.setRequestHeader(name, headers[name]);
- }
- }
- });
|