2 Copyright (c) 2003-2011, CKSource - Frederico Knabben. All rights reserved.
\r
3 For licensing, see LICENSE.html or http://ckeditor.com/license
\r
7 * @fileOverview Defines the {@link CKEDITOR.ajax} object, which holds ajax methods for
\r
12 * @namespace Ajax methods for data loading.
\r
15 CKEDITOR.ajax = (function()
\r
17 var createXMLHttpRequest = function()
\r
19 // In IE, using the native XMLHttpRequest for local files may throw
\r
20 // "Access is Denied" errors.
\r
21 if ( !CKEDITOR.env.ie || location.protocol != 'file:' )
\r
22 try { return new XMLHttpRequest(); } catch(e) {}
\r
24 try { return new ActiveXObject( 'Msxml2.XMLHTTP' ); } catch (e) {}
\r
25 try { return new ActiveXObject( 'Microsoft.XMLHTTP' ); } catch (e) {}
\r
30 var checkStatus = function( xhr )
\r
32 // HTTP Status Codes:
\r
34 // 304 : Not Modified
\r
35 // 0 : Returned when running locally (file://)
\r
36 // 1223 : IE may change 204 to 1223 (see http://dev.jquery.com/ticket/1450)
\r
38 return ( xhr.readyState == 4 &&
\r
39 ( ( xhr.status >= 200 && xhr.status < 300 ) ||
\r
40 xhr.status == 304 ||
\r
42 xhr.status == 1223 ) );
\r
45 var getResponseText = function( xhr )
\r
47 if ( checkStatus( xhr ) )
\r
48 return xhr.responseText;
\r
52 var getResponseXml = function( xhr )
\r
54 if ( checkStatus( xhr ) )
\r
56 var xml = xhr.responseXML;
\r
57 return new CKEDITOR.xml( xml && xml.firstChild ? xml : xhr.responseText );
\r
62 var load = function( url, callback, getResponseFn )
\r
64 var async = !!callback;
\r
66 var xhr = createXMLHttpRequest();
\r
71 xhr.open( 'GET', url, async );
\r
75 // TODO: perform leak checks on this closure.
\r
77 xhr.onreadystatechange = function()
\r
79 if ( xhr.readyState == 4 )
\r
81 callback( getResponseFn( xhr ) );
\r
89 return async ? '' : getResponseFn( xhr );
\r
92 return /** @lends CKEDITOR.ajax */ {
\r
95 * Loads data from an URL as plain text.
\r
96 * @param {String} url The URL from which load data.
\r
97 * @param {Function} [callback] A callback function to be called on
\r
98 * data load. If not provided, the data will be loaded
\r
99 * asynchronously, passing the data value the function on load.
\r
100 * @returns {String} The loaded data. For asynchronous requests, an
\r
101 * empty string. For invalid requests, null.
\r
103 * // Load data synchronously.
\r
104 * var data = CKEDITOR.ajax.load( 'somedata.txt' );
\r
107 * // Load data asynchronously.
\r
108 * var data = CKEDITOR.ajax.load( 'somedata.txt', function( data )
\r
113 load : function( url, callback )
\r
115 return load( url, callback, getResponseText );
\r
119 * Loads data from an URL as XML.
\r
120 * @param {String} url The URL from which load data.
\r
121 * @param {Function} [callback] A callback function to be called on
\r
122 * data load. If not provided, the data will be loaded
\r
123 * asynchronously, passing the data value the function on load.
\r
124 * @returns {CKEDITOR.xml} An XML object holding the loaded data. For asynchronous requests, an
\r
125 * empty string. For invalid requests, null.
\r
127 * // Load XML synchronously.
\r
128 * var xml = CKEDITOR.ajax.loadXml( 'somedata.xml' );
\r
129 * alert( xml.getInnerXml( '//' ) );
\r
131 * // Load XML asynchronously.
\r
132 * var data = CKEDITOR.ajax.loadXml( 'somedata.xml', function( xml )
\r
134 * alert( xml.getInnerXml( '//' ) );
\r
137 loadXml : function( url, callback )
\r
139 return load( url, callback, getResponseXml );
\r