Upgrade to ExtJS 3.0.0 - Released 07/06/2009
[extjs.git] / docs / source / ext-base-ajax.html
diff --git a/docs/source/ext-base-ajax.html b/docs/source/ext-base-ajax.html
new file mode 100644 (file)
index 0000000..09c0046
--- /dev/null
@@ -0,0 +1,374 @@
+<html>\r
+<head>\r
+  <title>The source code</title>\r
+    <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />\r
+    <script type="text/javascript" src="../resources/prettify/prettify.js"></script>\r
+</head>\r
+<body  onload="prettyPrint();">\r
+    <pre class="prettyprint lang-js">/*\r
+ * Portions of this file are based on pieces of Yahoo User Interface Library\r
+ * Copyright (c) 2007, Yahoo! Inc. All rights reserved.\r
+ * YUI licensed under the BSD License:\r
+ * http://developer.yahoo.net/yui/license.txt\r
+ */\r
+    Ext.lib.Ajax = function() {            \r
+           var activeX = ['MSXML2.XMLHTTP.3.0',\r
+                                  'MSXML2.XMLHTTP',\r
+                                  'Microsoft.XMLHTTP'],\r
+            CONTENTTYPE = 'Content-Type';\r
+                                  \r
+               // private\r
+               function setHeader(o) {\r
+               var conn = o.conn,\r
+                       prop;\r
+               \r
+               function setTheHeaders(conn, headers){\r
+                       for (prop in headers) {\r
+                    if (headers.hasOwnProperty(prop)) {\r
+                        conn.setRequestHeader(prop, headers[prop]);\r
+                    }\r
+                }   \r
+               }               \r
+               \r
+            if (pub.defaultHeaders) {\r
+                   setTheHeaders(conn, pub.defaultHeaders);\r
+            }\r
+\r
+            if (pub.headers) {\r
+                               setTheHeaders(conn, pub.headers);\r
+                pub.headers = null;                \r
+            }\r
+        }    \r
+        \r
+        // private\r
+        function createExceptionObject(tId, callbackArg, isAbort, isTimeout) {         \r
+            return {\r
+                   tId : tId,\r
+                   status : isAbort ? -1 : 0,\r
+                   statusText : isAbort ? 'transaction aborted' : 'communication failure',\r
+                    isAbort: true,\r
+                    isTimeout: true,\r
+                   argument : callbackArg\r
+            };\r
+        }  \r
+        \r
+        // private \r
+        function initHeader(label, value) {         \r
+                       (pub.headers = pub.headers || {})[label] = value;                                   \r
+        }\r
+           \r
+        // private\r
+        function createResponseObject(o, callbackArg) {\r
+            var headerObj = {},\r
+                headerStr,              \r
+                conn = o.conn,\r
+                t,\r
+                s;\r
+\r
+            try {\r
+                headerStr = o.conn.getAllResponseHeaders();   \r
+                Ext.each(headerStr.replace(/\r\n/g, '\n').split('\n'), function(v){\r
+                    t = v.indexOf(':');\r
+                    if(t >= 0){\r
+                        s = v.substr(0, t).toLowerCase();\r
+                        if(v.charAt(t + 1) == ' '){\r
+                            ++t;\r
+                        }\r
+                        headerObj[s] = v.substr(t + 1);\r
+                    }\r
+                });\r
+            } catch(e) {}\r
+                        \r
+            return {\r
+                tId : o.tId,\r
+                status : conn.status,\r
+                statusText : conn.statusText,\r
+                getResponseHeader : function(header){return headerObj[header.toLowerCase()];},\r
+                getAllResponseHeaders : function(){return headerStr},\r
+                responseText : conn.responseText,\r
+                responseXML : conn.responseXML,\r
+                argument : callbackArg\r
+            };\r
+        }\r
+        \r
+        // private\r
+        function releaseObject(o) {\r
+            o.conn = null;\r
+            o = null;\r
+        }        \r
+           \r
+        // private\r
+        function handleTransactionResponse(o, callback, isAbort, isTimeout) {\r
+            if (!callback) {\r
+                releaseObject(o);\r
+                return;\r
+            }\r
+\r
+            var httpStatus, responseObject;\r
+\r
+            try {\r
+                if (o.conn.status !== undefined && o.conn.status != 0) {\r
+                    httpStatus = o.conn.status;\r
+                }\r
+                else {\r
+                    httpStatus = 13030;\r
+                }\r
+            }\r
+            catch(e) {\r
+                httpStatus = 13030;\r
+            }\r
+\r
+            if ((httpStatus >= 200 && httpStatus < 300) || (Ext.isIE && httpStatus == 1223)) {\r
+                responseObject = createResponseObject(o, callback.argument);\r
+                if (callback.success) {\r
+                    if (!callback.scope) {\r
+                        callback.success(responseObject);\r
+                    }\r
+                    else {\r
+                        callback.success.apply(callback.scope, [responseObject]);\r
+                    }\r
+                }\r
+            }\r
+            else {\r
+                switch (httpStatus) {\r
+                    case 12002:\r
+                    case 12029:\r
+                    case 12030:\r
+                    case 12031:\r
+                    case 12152:\r
+                    case 13030:\r
+                        responseObject = createExceptionObject(o.tId, callback.argument, (isAbort ? isAbort : false), isTimeout);\r
+                        if (callback.failure) {\r
+                            if (!callback.scope) {\r
+                                callback.failure(responseObject);\r
+                            }\r
+                            else {\r
+                                callback.failure.apply(callback.scope, [responseObject]);\r
+                            }\r
+                        }\r
+                        break;\r
+                    default:\r
+                        responseObject = createResponseObject(o, callback.argument);\r
+                        if (callback.failure) {\r
+                            if (!callback.scope) {\r
+                                callback.failure(responseObject);\r
+                            }\r
+                            else {\r
+                                callback.failure.apply(callback.scope, [responseObject]);\r
+                            }\r
+                        }\r
+                }\r
+            }\r
+\r
+            releaseObject(o);\r
+            responseObject = null;\r
+        }  \r
+        \r
+        // private\r
+        function handleReadyState(o, callback){\r
+           callback = callback || {};\r
+            var conn = o.conn,\r
+               tId = o.tId,\r
+               poll = pub.poll,\r
+               cbTimeout = callback.timeout || null;\r
+\r
+            if (cbTimeout) {\r
+                pub.timeout[tId] = setTimeout(function() {\r
+                    pub.abort(o, callback, true);\r
+                }, cbTimeout);\r
+            }\r
+\r
+            poll[tId] = setInterval(\r
+                function() {\r
+                    if (conn && conn.readyState == 4) {\r
+                        clearInterval(poll[tId]);\r
+                        poll[tId] = null;\r
+\r
+                        if (cbTimeout) {\r
+                            clearTimeout(pub.timeout[tId]);\r
+                            pub.timeout[tId] = null;\r
+                        }\r
+\r
+                        handleTransactionResponse(o, callback);\r
+                    }\r
+                },\r
+                pub.pollInterval);\r
+        }\r
+        \r
+        // private\r
+        function asyncRequest(method, uri, callback, postData) {\r
+            var o = getConnectionObject() || null;\r
+\r
+            if (o) {\r
+                o.conn.open(method, uri, true);\r
+\r
+                if (pub.useDefaultXhrHeader) {                    \r
+                       initHeader('X-Requested-With', pub.defaultXhrHeader);\r
+                }\r
+\r
+                if(postData && pub.useDefaultHeader && (!pub.headers || !pub.headers[CONTENTTYPE])){\r
+                    initHeader(CONTENTTYPE, pub.defaultPostHeader);\r
+                }\r
+\r
+                if (pub.defaultHeaders || pub.headers) {\r
+                    setHeader(o);\r
+                }\r
+\r
+                handleReadyState(o, callback);\r
+                o.conn.send(postData || null);\r
+            }\r
+            return o;\r
+        }\r
+        \r
+        // private\r
+        function getConnectionObject() {\r
+            var o;             \r
+\r
+            try {\r
+                if (o = createXhrObject(pub.transactionId)) {\r
+                    pub.transactionId++;\r
+                }\r
+            } catch(e) {\r
+            } finally {\r
+                return o;\r
+            }\r
+        }\r
+              \r
+        // private\r
+        function createXhrObject(transactionId) {\r
+            var http;\r
+               \r
+            try {\r
+                http = new XMLHttpRequest();                \r
+            } catch(e) {\r
+                for (var i = 0; i < activeX.length; ++i) {                 \r
+                    try {\r
+                        http = new ActiveXObject(activeX[i]);                        \r
+                        break;\r
+                    } catch(e) {}\r
+                }\r
+            } finally {\r
+                return {conn : http, tId : transactionId};\r
+            }\r
+        }\r
+                \r
+           var pub = {\r
+               request : function(method, uri, cb, data, options) {\r
+                           if(options){\r
+                               var me = this,                  \r
+                                       xmlData = options.xmlData,\r
+                                       jsonData = options.jsonData,\r
+                        hs;\r
+                                       \r
+                               Ext.applyIf(me, options);               \r
+                           \r
+                           if(xmlData || jsonData){\r
+                        hs = me.headers;\r
+                        if(!hs || !hs[CONTENTTYPE]){\r
+                                       initHeader(CONTENTTYPE, xmlData ? 'text/xml' : 'application/json');\r
+                        }\r
+                                   data = xmlData || (Ext.isObject(jsonData) ? Ext.encode(jsonData) : jsonData);\r
+                               }\r
+                           }                               \r
+                           return asyncRequest(method || options.method || "POST", uri, cb, data);\r
+               },\r
+       \r
+               serializeForm : function(form) {\r
+                       var fElements = form.elements || (document.forms[form] || Ext.getDom(form)).elements,\r
+                       hasSubmit = false,\r
+                       encoder = encodeURIComponent,\r
+                               element,\r
+                       options, \r
+                       name, \r
+                       val,                    \r
+                       data = '',\r
+                       type;\r
+                       \r
+                       Ext.each(fElements, function(element) {                     \r
+                       name = element.name;                 \r
+                                       type = element.type;\r
+                                       \r
+                       if (!element.disabled && name){\r
+                               if(/select-(one|multiple)/i.test(type)){                                        \r
+                                           Ext.each(element.options, function(opt) {\r
+                                                   if (opt.selected) {\r
+                                                           data += String.format("{0}={1}&",                                                                                             \r
+                                                                                                encoder(name),                                                                                          \r
+                                                                                                 (opt.hasAttribute ? opt.hasAttribute('value') : opt.getAttributeNode('value').specified) ? opt.value : opt.text);\r
+                                }                                                              \r
+                            });\r
+                               } else if(!/file|undefined|reset|button/i.test(type)) {\r
+                                       if(!(/radio|checkbox/i.test(type) && !element.checked) && !(type == 'submit' && hasSubmit)){\r
+                                    \r
+                                data += encoder(name) + '=' + encoder(element.value) + '&';                     \r
+                                hasSubmit = /submit/i.test(type);    \r
+                            }                          \r
+                               } \r
+                       }\r
+                   });            \r
+                   return data.substr(0, data.length - 1);\r
+               },\r
+               \r
+               useDefaultHeader : true,\r
+               defaultPostHeader : 'application/x-www-form-urlencoded; charset=UTF-8',\r
+               useDefaultXhrHeader : true,\r
+               defaultXhrHeader : 'XMLHttpRequest',        \r
+               poll : {},\r
+               timeout : {},\r
+               pollInterval : 50,\r
+               transactionId : 0,\r
+               \r
+//     This is never called - Is it worth exposing this?                       \r
+//             setProgId : function(id) {\r
+//                 activeX.unshift(id);\r
+//             },\r
+\r
+//     This is never called - Is it worth exposing this?       \r
+//             setDefaultPostHeader : function(b) {\r
+//                 this.useDefaultHeader = b;\r
+//             },\r
+               \r
+//     This is never called - Is it worth exposing this?       \r
+//             setDefaultXhrHeader : function(b) {\r
+//                 this.useDefaultXhrHeader = b;\r
+//             },\r
+\r
+//     This is never called - Is it worth exposing this?               \r
+//             setPollingInterval : function(i) {\r
+//                 if (typeof i == 'number' && isFinite(i)) {\r
+//                     this.pollInterval = i;\r
+//                 }\r
+//             },\r
+               \r
+//     This is never called - Is it worth exposing this?\r
+//             resetDefaultHeaders : function() {\r
+//                 this.defaultHeaders = null;\r
+//             },\r
+       \r
+               abort : function(o, callback, isTimeout) {\r
+                       var me = this,\r
+                               tId = o.tId,\r
+                               isAbort = false;\r
+                       \r
+                   if (me.isCallInProgress(o)) {\r
+                       o.conn.abort();\r
+                       clearInterval(me.poll[tId]);\r
+                       me.poll[tId] = null;\r
+                       if (isTimeout) {\r
+                           me.timeout[tId] = null;\r
+                       }\r
+                                       \r
+                       handleTransactionResponse(o, callback, (isAbort = true), isTimeout);                \r
+                   }\r
+                   return isAbort;\r
+               },\r
+       \r
+               isCallInProgress : function(o) {\r
+                   // if there is a connection and readyState is not 0 or 4\r
+                   return o.conn && !{0:true,4:true}[o.conn.readyState];               \r
+               }\r
+           };\r
+           return pub;\r
+    }();</pre>    \r
+</body>\r
+</html>
\ No newline at end of file