views:

9802

answers:

7

The following ajax call is failing in IE.

$.ajax({
    url:"{{SITE_URL}}/content/twitter.json",
    dataType:"json",
    error:function(xhr, status, errorThrown) {
  alert(errorThrown+'\n'+status+'\n'+xhr.statusText);
 },
    success:function(json) {
               ...Snip...
 }
});

The error function returns

Undefined
parsererror
OK

No request is made to the server so i dont think its a problem with the json.

Fixed, See #1351389

+4  A: 

is this a copy/paste? the one thing that gets me all the time is leaving the last ',' in an object constructor. that is, most browsers JS accept:

o = { a:1, b:2, c:3, };

but IE chokes on this because the comma after the last item. change it to:

o = { a:1, b:2, c:3 };

and it works.

Javier
A: 

What is the {{SITE_URL}} chunk giving is about. Try looking at the code in view source code of the browser. If the {{SITE _URL}} chunk has a trailing slash and that would make the request url:

http://modomain.com//content/twitter.json

Which could creep IE out?

Pim Jager
+2  A: 

IE caches AJAX requests really aggressively (more so than Firefox, anyway). You need to set the Cache-Control headers in the response appropriately if this is not right for your site.

Craig Stuntz
Good point, ive added ?_=1234 on the end of it and ie now request the page every time.Still same problem though :(
Sam
+1  A: 

One major problem with statically generated JSON and IE are the leading "commas", for examples this throws an error in IE:

{
    "one":"hello",
    "two":"hi",
 }

Note the last comma.

Luca Matteis
+7  A: 

For the caching problem why don't you simple use the cache: false parameter?

$.ajax({ 
    url: "yoururl",
    cache: false,
    ....
tanathos
Will do, cheers for the tip
Sam
+9  A: 

Fixed, I changed the content-type from application/json; charset=utf8 to just plain application/json.
I hate IE :)

Also to avoid IE super-caching try this:

var d = new Date()
    $.ajax({
        url:"{{SITE_URL}}/content/twitter.json?_="+d.getTime(), 
...Snip...

That way each request is a new url for IE to get :D

Sam
God, am I glad I found this answer. This thing has cost me days of my life that Microsoft won't give me back. Just to reiterate: I fucking hate IE, too.
Lenni
Dear IE, I hate you.Dear @Sam, I love you.
gmcalab
A: 

IE: JSON not defined error resolved at

http://funkatron.com/site/comments/safely-parsing-json-in-javascript/

by using dataType: "json" and avoid parsing