Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- From 00fcc655fefbaa10cc0c42ba84e18d0e6133cd4b Mon Sep 17 00:00:00 2001
- From: Standa Opichal <opichals@gmail.com>
- Date: Fri, 23 Apr 2010 19:02:07 +0200
- Subject: [PATCH] Migrating the XMLHTTPRequest to the current nodejs version 0.1.91.
- Added relative URL support utilizing window.location.
- Added Cookie support through document.cookie.
- It should still work nicely for environments wihtout the window or document instances.
- ---
- _base/node-xhr.js | 26 +++++++++++++++++++-------
- 1 files changed, 19 insertions(+), 7 deletions(-)
- diff --git a/_base/node-xhr.js b/_base/node-xhr.js
- index 88c4438..4534fd2 100644
- --- a/_base/node-xhr.js
- +++ b/_base/node-xhr.js
- @@ -82,6 +82,13 @@ XMLHttpRequest = function(){
- url = new dojo._Url(url);
- delete url.fragment;
- +
- + // get the default window location for relative URLs
- + if (!url.scheme &&
- + typeof window != "undefined" && window.location && window.location.protocol) {
- + url.scheme = window.location.protocol.match('[^:]+')[0];
- + }
- +
- if(!(url.scheme.toUpperCase() in SCHEMES)){ throw new NOT_SUPPORTED_ERR; }
- if(url.user){ temp_user = url.user; delete url.user; }
- if(url.password){ temp_password = url.password; delete url.password; }
- @@ -116,7 +123,7 @@ XMLHttpRequest = function(){
- // Not matching header or value format
- if(!header){ throw new SYNTAX_ERR; }
- - if(!(header.toUpperCase() in RESERVED_HEADERS)){ return; }
- + if(header.toUpperCase() in RESERVED_HEADERS){ return; }
- if((/^(proxy-|sec-)/i).test(header)){ return; }
- if(header in authorHeaders){
- @@ -152,16 +159,18 @@ XMLHttpRequest = function(){
- for(var h in authorHeaders){ headers[h] = authorHeaders[h].join(", "); }
- var url = request.url.path;
- if(request.url.query){ url += "?" + request.url.query; }
- + if (typeof document != "undefined" && document.cookie) {
- + headers['Cookie'] = document.cookie;
- + }
- var serverRequest = server.request(request.method, url, headers);
- - if(data){ serverRequest.sendBody(data, encoding); }
- + if(data){ serverRequest.write(data, encoding); }
- onreadystatechange = dojo.hitch(this, "onreadystatechange");
- - serverRequest.finish(function(serverResponse){
- + serverRequest.addListener('response', function(serverResponse){
- responseText = response.body = ""; // Assuming utf8 charset, Node should sort that out
- - serverResponse.setBodyEncoding("utf8");
- - serverResponse.addListener("body", function(chunk){
- + serverResponse.addListener("data", function(chunk){
- if(error){ return; }
- if(readyState == OPENED){
- @@ -173,8 +182,7 @@ XMLHttpRequest = function(){
- responseText = response.body += chunk;
- });
- -
- - serverResponse.addListener("complete", function(){
- + serverResponse.addListener("end", function(){
- if(error){ return; }
- status = serverResponse.statusCode;
- @@ -184,6 +192,9 @@ XMLHttpRequest = function(){
- for(var h in serverResponse.headers){
- response.headers[h] = serverResponse.headers[h];
- response._headers[h.toUpperCase()] = serverResponse.headers[h];
- + if (h.toUpperCase() == 'SET-COOKIE' && typeof document != "undefined" ) {
- + document.cookie = response.headers[h];
- + }
- }
- readyState = DONE;
- @@ -192,6 +203,7 @@ XMLHttpRequest = function(){
- // Need better error handling
- });
- + serverRequest.end();
- };
- this.abort = function(){
- --
- 1.6.6
Add Comment
Please, Sign In to add comment