In looking into a BlogChat bug with IE7 Beta with help from Sunava and others from MS we have determined that the ActiveX implementation in IE7 doesn't work exactly the same as pre-IE7 browsers. Brent had a theory about what was happening, although he mistakenly thought we were using the native object at the time. It seems it is the ActiveX implementation in IE7 that is refiring or some such thing.
Folks should be cautious with their AJAX implementations in supporting IE7 and make sure they instantiate a native object in IE7 instead of the ActiveX one.
One way to do this was posted by Joe Walker here.
And I'll post from the current Dojo source code (revision 4219). Please forgive the formatting as I don't feel like editing it myself:
101
102 // These are in order of decreasing likelihood; this will change in time.
103 dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
104
105 dojo.hostenv.getXmlhttpObject = function(){
106 var http = null;
107 var last_e = null;
108 try{ http = new XMLHttpRequest(); }catch(e){}
109 if(!http){
110 for(var i=0; i<3; ++i){
111 var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
112 try{
113 http = new ActiveXObject(progid);
114 }catch(e){
115 last_e = e;
116 }
117
118 if(http){
119 dojo.hostenv._XMLHTTP_PROGIDS = [progid]; // so faster next time
120 break;
121 }
122 }
123
124 /*if(http && !http.toString) {
125 http.toString = function() { "[object XMLHttpRequest]"; }
126 }*/
127 }
128
129 if(!http){
130 return dojo.raise("XMLHTTP not available", last_e);
131 }
132
133 return http;
134 }
135
102 // These are in order of decreasing likelihood; this will change in time.
103 dojo.hostenv._XMLHTTP_PROGIDS = ['Msxml2.XMLHTTP', 'Microsoft.XMLHTTP', 'Msxml2.XMLHTTP.4.0'];
104
105 dojo.hostenv.getXmlhttpObject = function(){
106 var http = null;
107 var last_e = null;
108 try{ http = new XMLHttpRequest(); }catch(e){}
109 if(!http){
110 for(var i=0; i<3; ++i){
111 var progid = dojo.hostenv._XMLHTTP_PROGIDS[i];
112 try{
113 http = new ActiveXObject(progid);
114 }catch(e){
115 last_e = e;
116 }
117
118 if(http){
119 dojo.hostenv._XMLHTTP_PROGIDS = [progid]; // so faster next time
120 break;
121 }
122 }
123
124 /*if(http && !http.toString) {
125 http.toString = function() { "[object XMLHttpRequest]"; }
126 }*/
127 }
128
129 if(!http){
130 return dojo.raise("XMLHTTP not available", last_e);
131 }
132
133 return http;
134 }
135