8

I am trying to get my angular app to do an $http.get request. Works everywhere but IE8. I am using latest Angular (1.0.6 I think). The only message IE gives is:TypeError:

Access is denied. undefined (in previous angular this was )

My host (nodejs)is set to send cors headers:

res.header('Access-Control-Allow-Origin', '*'); //config.allowedDomains
res.header('Access-Control-Allow-Credentials', true);
res.header('Access-Control-Allow-Headers', 'X-Requested-With, Content-Type, X-Requested-By');
res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS');

I have tried to get more info about the error using debug tools but:

Fiddler: doesn't show xmlhttprequests - seems you can hack your NET app to fix that but not sure what to do with my web page. DebugBar: doesn't show these requests either FirebugLite: 2 version I tried are broken - just random errors and doesn't load

Changing the hosts to same origin clears the issue so I assume it's trying something but man it's hard to debug.

Angular posts on this seem outdated and I am not sure what to do from here.

7
  • 1
    Fiddler totally does show XHR for IE. If it didn't, that would be a HUGE oversight. stackoverflow.com/questions/7351238/… Commented Apr 11, 2013 at 23:16
  • Also to be accurate, IE8 and IE9 don't have XHR, but instead do XDomainRequest, or XDR. Commented Apr 11, 2013 at 23:18
  • Well I have read that fiddler post and check setting and for the life of me I cannot see any of these requests. Other posts indicate a proxy has to be set for fiddler to pick these up. And I am aware of the IE8 XHR - XDomainRequest - I just can't seem to fund current Angular docs on this. Some older posts indicate there is no support for XDomainRequests but not sure what current status is - I find it hard to believe that IE8 will not work with Angular $http Commented Apr 11, 2013 at 23:24
  • it's very possible that my setup is what is making Fiddler not work - vmware client to an OSX Nodejs server. Nevertheless the main issue is simply getting IE8 to work Commented Apr 11, 2013 at 23:25
  • Thats how my system is setup (granted I dont test IE8). I do know that $http should work with IE8, so there is likely some other issue. Commented Apr 12, 2013 at 0:00

3 Answers 3

7

This has nothing to do with $http. $http lets you make XHR(XDR) or JSONP requests. It doesn't provide a mechanism to circumvent the browsers same origin policy.

Changing the hosts to same origin clears the issue so I assume it's trying something but man it's hard to debug.

That's the key to your problem. IE8 doesn't support Cross-Origin-Resource-Sharing (CORS) very well. In order to make cross domain calls with IE8, you better off either:

  1. Use your nodejs app to proxy the request for you, letting you use the same domain.
  2. Use JSONP in your $http.get() request

There are a number of gotchas associated with CORS and IE8, which are outlined here.

Sign up to request clarification or add additional context in comments.

4 Comments

Seems like I could use XDomainRequest - someone made a fork of angular with support for this but it's outdated now.
I would recommend against using XDomainRequest. The Angular folks had a good reason why they didn't merge this feature in, it's not a great solution. If possible in your case, I would just proxy the request either using nodejs or by adding apache with mod_proxy in front of the node app.
OlliM is right, XDR sucks. By default, expressjs's form parser can't parse data that is posted, because XDR only supports text/plain content-types. No custom header support, no preflight requests, etc.
Angular 1.2 doesn't support IE<=9 CROS.
3

I was running into this same issue, and while it's likely not ideal, one solution is to change IE's 'Access data sources across domains' security setting to Enable or Prompt:

http://technet.microsoft.com/en-us/library/dd346862.aspx

In my case I was running into the same thing when trying to fetch data (via angular's $resource) from my own API that was hosted on another domain. In IE8 & IE9 these requests would fail with the error you described above. Changing the security setting in IE to allow cross-domain data requests resolved that problem.

Comments

1

AngularJS doesn't support IE<=9 CORS.

As required, there is a link to github official AngualrJS website :

AngularJS Github official discussion

2 Comments

Why -1 please say it?
Please provide a link supporting your claim. Then I'll remove my -1

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.