38

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 don't think its a problem with the JSON.

Fixed, See #1351389

1
  • It's working on other browsers? Commented Jan 8, 2009 at 20:53

8 Answers 8

51

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

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

8 Comments

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 effing hate IE, too.
Dear IE, I hate you. Dear @Sam, I love you.
Also possible with jQuery.Ajax option "cache". api.jquery.com/jQuery.ajax/#options If set to false, it will force requested pages not to be cached by the browser. Setting cache to false also appends a query string parameter, "_=[TIMESTAMP]", to the URL.
Ie was getting hung up on the charset declaration
Thx for a solution! +1 for all IE haters
|
48

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

$.ajax({ 
    url: "yoururl",
    cache: false,
    ....

2 Comments

Cheers, solved it for me! I am curious as to why IE doesn't actually use the version that it caches...
Thanks, this saved me some confusion! Was working fine with Firefox, but not in IE.
8

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.

1 Comment

Men - you are a freak :) You saved me alot time. Note that this breaks only IE7 and below. From IE8 this isn't rise errors.
7

In newer versions of internet explorer (IE7) it is necessary to write the next line before calling $.ajax, otherwise it would never call the function:

$.ajaxSetup({ cache: false }); //this line before $.ajax!!!
$.ajax({
    //codes
    //codes
    //codes
});

Comments

4

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.

1 Comment

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

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.

Comments

0

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?

1 Comment

Well, any browser I know of woudl creep out about that... so this is no specific IE problem.
0

IE: JSON not defined error resolved at

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

by using dataType: "json" and avoid parsing

Comments

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.