4 * Copyright, Moxiecode Systems AB
5 * Released under LGPL License.
7 * License: http://www.tinymce.com/license
8 * Contributing: http://www.tinymce.com/contributing
12 * This class enables you to send XMLHTTPRequests cross browser.
13 * @class tinymce.util.XHR
16 * // Sends a low level Ajax request
17 * tinymce.util.XHR.send({
19 * success: function(text) {
20 * console.debug(text);
24 define("tinymce/util/XHR", [], function() {
27 * Sends a XMLHTTPRequest.
28 * Consult the Wiki for details on what settings this method takes.
31 * @param {Object} settings Object will target URL, callbacks and other info needed to make the request.
33 send: function(settings) {
37 if (!settings.async || xhr.readyState == 4 || count++ > 10000) {
38 if (settings.success && count < 10000 && xhr.status == 200) {
39 settings.success.call(settings.success_scope, '' + xhr.responseText, xhr, settings);
40 } else if (settings.error) {
41 settings.error.call(settings.error_scope, count > 10000 ? 'TIMED_OUT' : 'GENERAL', xhr, settings);
46 setTimeout(ready, 10);
51 settings.scope = settings.scope || this;
52 settings.success_scope = settings.success_scope || settings.scope;
53 settings.error_scope = settings.error_scope || settings.scope;
54 settings.async = settings.async === false ? false : true;
55 settings.data = settings.data || '';
57 xhr = new XMLHttpRequest();
60 if (xhr.overrideMimeType) {
61 xhr.overrideMimeType(settings.content_type);
64 xhr.open(settings.type || (settings.data ? 'POST' : 'GET'), settings.url, settings.async);
66 if (settings.content_type) {
67 xhr.setRequestHeader('Content-Type', settings.content_type);
70 xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
72 xhr.send(settings.data);
75 if (!settings.async) {
79 // Wait for response, onReadyStateChange can not be used since it leaks memory in IE
80 setTimeout(ready, 10);