1 | /* Simple AJAX Code-Kit (SACK) v1.6.1 */
|
---|
2 | /* ©2005 Gregory Wild-Smith */
|
---|
3 | /* www.twilightuniverse.com */
|
---|
4 | /* Software licenced under a modified X11 licence,
|
---|
5 | see documentation or authors website for more details */
|
---|
6 |
|
---|
7 | function sack(file) {
|
---|
8 | this.xmlhttp = null;
|
---|
9 |
|
---|
10 | this.resetData = function() {
|
---|
11 | this.method = "POST";
|
---|
12 | this.queryStringSeparator = "?";
|
---|
13 | this.argumentSeparator = "&";
|
---|
14 | this.URLString = "";
|
---|
15 | this.encodeURIString = true;
|
---|
16 | this.execute = false;
|
---|
17 | this.element = null;
|
---|
18 | this.elementObj = null;
|
---|
19 | this.requestFile = file;
|
---|
20 | this.vars = new Object();
|
---|
21 | this.responseStatus = new Array(2);
|
---|
22 | };
|
---|
23 |
|
---|
24 | this.resetFunctions = function() {
|
---|
25 | this.onLoading = function() { };
|
---|
26 | this.onLoaded = function() { };
|
---|
27 | this.onInteractive = function() { };
|
---|
28 | this.onCompletion = function() { };
|
---|
29 | this.onError = function() { };
|
---|
30 | this.onFail = function() { };
|
---|
31 | };
|
---|
32 |
|
---|
33 | this.reset = function() {
|
---|
34 | this.resetFunctions();
|
---|
35 | this.resetData();
|
---|
36 | };
|
---|
37 |
|
---|
38 | this.createAJAX = function() {
|
---|
39 | try {
|
---|
40 | this.xmlhttp = new ActiveXObject("Msxml2.XMLHTTP");
|
---|
41 | } catch (e1) {
|
---|
42 | try {
|
---|
43 | this.xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
|
---|
44 | } catch (e2) {
|
---|
45 | this.xmlhttp = null;
|
---|
46 | }
|
---|
47 | }
|
---|
48 |
|
---|
49 | if (! this.xmlhttp) {
|
---|
50 | if (typeof XMLHttpRequest != "undefined") {
|
---|
51 | this.xmlhttp = new XMLHttpRequest();
|
---|
52 | } else {
|
---|
53 | this.failed = true;
|
---|
54 | }
|
---|
55 | }
|
---|
56 | };
|
---|
57 |
|
---|
58 | this.setVar = function(name, value){
|
---|
59 | this.vars[name] = Array(value, false);
|
---|
60 | };
|
---|
61 |
|
---|
62 | this.encVar = function(name, value, returnvars) {
|
---|
63 | if (true == returnvars) {
|
---|
64 | return Array(encodeURIComponent(name), encodeURIComponent(value));
|
---|
65 | } else {
|
---|
66 | this.vars[encodeURIComponent(name)] = Array(encodeURIComponent(value), true);
|
---|
67 | }
|
---|
68 | }
|
---|
69 |
|
---|
70 | this.processURLString = function(string, encode) {
|
---|
71 | encoded = encodeURIComponent(this.argumentSeparator);
|
---|
72 | regexp = new RegExp(this.argumentSeparator + "|" + encoded);
|
---|
73 | varArray = string.split(regexp);
|
---|
74 | for (i = 0; i < varArray.length; i++){
|
---|
75 | urlVars = varArray[i].split("=");
|
---|
76 | if (true == encode){
|
---|
77 | this.encVar(urlVars[0], urlVars[1]);
|
---|
78 | } else {
|
---|
79 | this.setVar(urlVars[0], urlVars[1]);
|
---|
80 | }
|
---|
81 | }
|
---|
82 | }
|
---|
83 |
|
---|
84 | this.createURLString = function(urlstring) {
|
---|
85 | if (this.encodeURIString && this.URLString.length) {
|
---|
86 | this.processURLString(this.URLString, true);
|
---|
87 | }
|
---|
88 |
|
---|
89 | if (urlstring) {
|
---|
90 | if (this.URLString.length) {
|
---|
91 | this.URLString += this.argumentSeparator + urlstring;
|
---|
92 | } else {
|
---|
93 | this.URLString = urlstring;
|
---|
94 | }
|
---|
95 | }
|
---|
96 |
|
---|
97 | // prevents caching of URLString
|
---|
98 | this.setVar("rndval", new Date().getTime());
|
---|
99 |
|
---|
100 | urlstringtemp = new Array();
|
---|
101 | for (key in this.vars) {
|
---|
102 | if (false == this.vars[key][1] && true == this.encodeURIString) {
|
---|
103 | encoded = this.encVar(key, this.vars[key][0], true);
|
---|
104 | delete this.vars[key];
|
---|
105 | this.vars[encoded[0]] = Array(encoded[1], true);
|
---|
106 | key = encoded[0];
|
---|
107 | }
|
---|
108 |
|
---|
109 | urlstringtemp[urlstringtemp.length] = key + "=" + this.vars[key][0];
|
---|
110 | }
|
---|
111 | if (urlstring){
|
---|
112 | this.URLString += this.argumentSeparator + urlstringtemp.join(this.argumentSeparator);
|
---|
113 | } else {
|
---|
114 | this.URLString += urlstringtemp.join(this.argumentSeparator);
|
---|
115 | }
|
---|
116 | }
|
---|
117 |
|
---|
118 | this.runResponse = function() {
|
---|
119 | eval(this.response);
|
---|
120 | }
|
---|
121 |
|
---|
122 | this.runAJAX = function(urlstring) {
|
---|
123 | if (this.failed) {
|
---|
124 | this.onFail();
|
---|
125 | } else {
|
---|
126 | this.createURLString(urlstring);
|
---|
127 | if (this.element) {
|
---|
128 | this.elementObj = document.getElementById(this.element);
|
---|
129 | }
|
---|
130 | if (this.xmlhttp) {
|
---|
131 | var self = this;
|
---|
132 | if (this.method == "GET") {
|
---|
133 | totalurlstring = this.requestFile + this.queryStringSeparator + this.URLString;
|
---|
134 | this.xmlhttp.open(this.method, totalurlstring, true);
|
---|
135 | } else {
|
---|
136 | this.xmlhttp.open(this.method, this.requestFile, true);
|
---|
137 | try {
|
---|
138 | this.xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
|
---|
139 | } catch (e) { }
|
---|
140 | }
|
---|
141 |
|
---|
142 | this.xmlhttp.onreadystatechange = function() {
|
---|
143 | switch (self.xmlhttp.readyState) {
|
---|
144 | case 1:
|
---|
145 | self.onLoading();
|
---|
146 | break;
|
---|
147 | case 2:
|
---|
148 | self.onLoaded();
|
---|
149 | break;
|
---|
150 | case 3:
|
---|
151 | self.onInteractive();
|
---|
152 | break;
|
---|
153 | case 4:
|
---|
154 | self.response = self.xmlhttp.responseText;
|
---|
155 | self.responseXML = self.xmlhttp.responseXML;
|
---|
156 | self.responseStatus[0] = self.xmlhttp.status;
|
---|
157 | self.responseStatus[1] = self.xmlhttp.statusText;
|
---|
158 |
|
---|
159 | if (self.execute) {
|
---|
160 | self.runResponse();
|
---|
161 | }
|
---|
162 |
|
---|
163 | if (self.elementObj) {
|
---|
164 | elemNodeName = self.elementObj.nodeName;
|
---|
165 | elemNodeName.toLowerCase();
|
---|
166 | if (elemNodeName == "input"
|
---|
167 | || elemNodeName == "select"
|
---|
168 | || elemNodeName == "option"
|
---|
169 | || elemNodeName == "textarea") {
|
---|
170 | self.elementObj.value = self.response;
|
---|
171 | } else {
|
---|
172 | self.elementObj.innerHTML = self.response;
|
---|
173 | }
|
---|
174 | }
|
---|
175 | if (self.responseStatus[0] == "200") {
|
---|
176 | self.onCompletion();
|
---|
177 | } else {
|
---|
178 | self.onError();
|
---|
179 | }
|
---|
180 |
|
---|
181 | self.URLString = "";
|
---|
182 | break;
|
---|
183 | }
|
---|
184 | };
|
---|
185 |
|
---|
186 | this.xmlhttp.send(this.URLString);
|
---|
187 | }
|
---|
188 | }
|
---|
189 | };
|
---|
190 |
|
---|
191 | this.reset();
|
---|
192 | this.createAJAX();
|
---|
193 | }
|
---|