rmurphey Adventures in JavaScript

Solved: AJAX returns bad results in Internet Explorer

10 Jan 2008 edit

Note to self: IE6 likes to cache AJAX requests, and this can be a bad thing if other data on the page that will affect the result of the request has changed.

You'll see this if you have two fields on a page that both contribute to a result, but only send them to the server when one of them has changed.

Let's say field1 and field2 get multiplied on the server side, and both start out with values of 1. So, in IE6:

  • Set field1 to 1000: Response is 1000.
  • Set field1 to 100: Response is 100.
  • Set field2 to 123: Response is 12300
  • Set field 1 back to 1000: Uh oh! Response is 1000 again!

IE6 has decided that the result from the first time you set field1 to 1000 was good enough, and it doesn't look to see that the new result is different.

The solution? Add a timestamp to your requests, so each one will look different to IE even if the real data is the same:

{% codeblock lang:javascript %} // just an example; you'd // obviously build this from // the field itself var data = 'field1=1000';

// build the timestamp var timestamp = new Date().getTime(); data = data + '&' + timestamp;

// now you can send your data // using ajax {% endcodeblock %}

Thankfully, when this happened to me yesterday, I had a coworker who only needed a couple of minutes with the server logs to figure out what was happening. After he figured it out here, I found this thread, which verified the cause, and I was able to solve it in a few minutes.

Comments