javascript - Trouble with XDomain Request to node server in IE8 -


i've been having trouble trying issue cors request via xdomainrequest object in ie8. code, need send post request data server passes data along through several other services. i've gotten server respond , process requests , data coming other browsers, both using jquery's ajax method , using vanilla javascript , xmlhttprequest object. however, after reading mozilla's cors documentation, microsoft's xdomainrequest documentation, , quite few blog posts , stack overflow questions latter, can't seem xdomainrequests work. here code xdomainrequest i'm trying make:

creating request:

if (typeof xdomainrequest != "undefined") {     // xdomainrequest ie8 & 9.     xhr = new xdomainrequest();     console.log('generated xdomainrequest');         xhr.onprogress = function() {console.log('progress');};      xhr.ontimeout = function() {console.log('ontimeout');};      xhr.onerror = function() {console.log('error');};      xhr.onload = function() {console.log('success');};     xhr.open(method, url);     console.log('open xdomainrequest'); } 

and sending request (which done in function):

if (typeof xdomainrequest != 'undefined') {     console.log('xdomainrequest');     settimeout(function () {                 console.log('sending request');                 data = 'foo=bar&baz=bat';                 xhr.send(data);             }, 0);  } 

i'm aware request can not sent across different protocols, , can confirm request being made https https. however, when running code, receive error generated xdomainrequest's error handler. when testing request windows xp ie8 virtual machine on virtual box, error generated request's error handler, unfortunately, no indication of failed. know xdomainrequest able send data if content type of 'text/plain' , type of data have been testing with. relevant server code here:

for options request:

var http = require('http'); var url = require('url'); var request = require('request'); var aws = require('aws-sdk'); var path = require('path'); var fs = require('fs');  function checkorigin(request) {     /* function determine if origin greenlit cors       * @param request http request being made server.      * @return returns whether origin matches parent domain.       */     var acceptabledomain = new regexp("some_url.com");     if (acceptabledomain.test(request.headers.origin)) {         return request.headers.origin;     } else {         return null;     } } . . // unrelated code between these functions // . if (request.method === 'options') {         console.log('!options');           var headers = {};           headers["access-control-allow-origin"] = checkorigin(request);           headers["access-control-allow-methods"] = "post, options";           headers["access-control-allow-credentials"] = true;           headers["access-control-max-age"] = '86400'; // 24 hours           headers["vary"] = 'origin';           headers["access-control-allow-headers"] = "x-requested-with, x-http-method-override, content-type, accept";           response.writehead(200, headers);           response.end();      } 

for request:

if (request.method === 'get') {         console.log("request received!");         var filetype = {             "html": "text/html",             "jpeg": "image/jpeg",             "jpg": "image/jpeg",             "png": "image/png",             "js": "application/javascript",             "css": "text/css"};          var filename = "some_script.js";         var filepath = path.join(process.cwd(), filename);         var ext = filetype[filename.split(".")[1]];         var filestream = fs.createreadstream(filepath);         console.log(ext);         response.writehead(200, {'content-type':ext});         filestream.pipe(response);         //maybe need return here?     } 

for post request:

if (request.method == 'post'                 && (contenttype != undefined)                 && ((contenttype.indexof('application/json') != -1)                || (contenttype.indexof('application/x-www-form-urlencoded') != -1)                || (contenttype.indexof('text/plain')!= -1))) {         var message = '';         var body = "";         console.log("post received!");          if((contenttype.indexof('application/json') != -1)              || contenttype.indexof('application/x-www-form-urlencoded') != -1) {              // once request posts data, begin parsing data , add 'body.'             request.on('data', function (chunk) {                 var parsedchunk = json.parse(chunk);                 body += parsedchunk;             });             request.on('end', function () {                 console.log('data:' + body.replace(/,/g, '\n'));             });         } else {             message = 'post received';             response.write(message);         }         response.writehead(200, {'content-length': message.length,                              'access-control-allow-origin': checkorigin(request),                              'access-control-allow-headers': "x-requested-with, x-http-method-override, content-type, accept",                             'access-control-allow-methods': "post, options",                             'access-control-allow-credentials': 'true',                             'access-control-max-age': '86400',                             'vary':'origin',                             'content-type': 'text/plain'});         //response.write('post received');         response.end();  

does have ideas might going wrong when making xdomainrequest? let me know if there's other information can include might help!


Comments