Skip to content

Commit

Permalink
Touched up the XMLHttpRequest code (fixed some bugs, fixed formatting…
Browse files Browse the repository at this point in the history
…, etc.).
  • Loading branch information
jeresig committed Jul 9, 2007
1 parent c4eddea commit de71a04
Showing 1 changed file with 86 additions and 65 deletions.
151 changes: 86 additions & 65 deletions build/runtest/env.js
Original file line number Diff line number Diff line change
Expand Up @@ -469,82 +469,103 @@ var window = this;
}

// XMLHttpRequest
// Originally implemented by Yehuda Katz

window.XMLHttpRequest = function(){
this.headers = {};
this.responseHeaders = {};
this.headers = {};
this.responseHeaders = {};
};

XMLHttpRequest.prototype = {
open: function(method, url, async, user, password){
this.readyState = 1;
if(async) this.async = true;
this.method = method || "GET";
this.url = url;
this.onreadystatechange();
this.readyState = 1;
if (async)
this.async = true;
this.method = method || "GET";
this.url = url;
this.onreadystatechange();
},
setRequestHeader: function(header, value){
this.headers[header] = value;
this.headers[header] = value;
},
getResponseHeader: function(header){ },
send: function(data){
var makeRequest = function() {
var url = new java.net.URL(this.url);
var connection = url.openConnection();
// Add headers to Java connection
for(header in this.headers) connection.addRequestProperty(header, this.headers[header]);
connection.connect();
// Stick the response headers into responseHeaders
for(i=0;;i++) {
headerName = connection.getHeaderFieldKey(i);
headerValue = connection.getHeaderField(i);
if(!headerName && !headerValue) break;
if(headerName) this.responseHeaders[headerName] = headerValue;
}
this.readyState = 4;
this.status = parseInt(connection.responseCode);
this.statusText = connection.responseMessage;
var stream = new java.io.InputStreamReader(connection.getInputStream());
var buffer = new java.io.BufferedReader(stream);
var line;
while((line = buffer.readLine()) != null) this.responseText += line;
try {
this.responseXML = new DOMDocument(this.responseText);
} catch(e) {
this.responseXML = null;
}
this.onreadystatechange();
};
if(this.async) {
var requestThread = (new java.lang.Thread(new java.lang.Runnable({
run: makeRequest
})));
requestThread.start();
}
else makeRequest();
},
abort: function(){ },
onreadystatechange: function(){ },
getResponseHeader: function(header) {
if(this.readyState < 3) throw new Error("INVALID_STATE_ERR");
else {
var returnedHeaders = [];
for(rHeader in this.responseHeaders) {
if(rHeader.match(new Regexp(header, "i"))) returnedHeaders.push(this.responseHeaders[rHeader]);
}
if(returnedHeaders != []) return returnedHeaders.join(", ");
}
return null;
},
getAllResponseHeaders: function(header) {
if(this.readyState < 3) throw new Error("INVALID_STATE_ERR");
else {
returnedHeaders = [];
for(var header in this.responseHeaders) {
returnedHeaders += (header + ": " + this.responseHeaders[header]);
}
return returnedHeaders.join("\r\n");
}
function makeRequest(){
var url = new java.net.URL(this.url),
connection = url.openConnection();

// Add headers to Java connection
for (var header in this.headers)
connection.addRequestProperty(header, this.headers[header]);

connection.connect();

// Stick the response headers into responseHeaders
for (i=0; ; i++) {
var headerName = connection.getHeaderFieldKey(i);
var headerValue = connection.getHeaderField(i);
if (!headerName && !headerValue) break;
if (headerName)
this.responseHeaders[headerName] = headerValue;
}

this.readyState = 4;
this.status = parseInt(connection.responseCode);
this.statusText = connection.responseMessage;

var stream = new java.io.InputStreamReader(
connection.getInputStream()),
buffer = new java.io.BufferedReader(stream),
line;

while ((line = buffer.readLine()) != null)
this.responseText += line;

try {
this.responseXML = new DOMDocument(this.responseText);
} catch(e) {
this.responseXML = null;
}

this.onreadystatechange();
}

if (this.async)
(new java.lang.Thread(new java.lang.Runnable({
run: makeRequest
}))).start();
else
makeRequest();
},
abort: function(){},
onreadystatechange: function(){},
getResponseHeader: function(header){
if (this.readyState < 3)
throw new Error("INVALID_STATE_ERR");
else {
var returnedHeaders = [];
for (var rHeader in this.responseHeaders) {
if (rHeader.match(new Regexp(header, "i")))
returnedHeaders.push(this.responseHeaders[rHeader]);
}

if (returnedHeaders.length)
return returnedHeaders.join(", ");
}

return null;
},
getAllResponseHeaders: function(header){
if (this.readyState < 3)
throw new Error("INVALID_STATE_ERR");
else {
var returnedHeaders = [];

for (var header in this.responseHeaders)
returnedHeaders.push( header + ": " + this.responseHeaders[header] );

return returnedHeaders.join("\r\n");
}
},
async: true,
readyState: 0,
Expand Down

0 comments on commit de71a04

Please sign in to comment.