// The transfer is complete and the data is available, or the request timed out
if ( xml && (xml.readyState == 4 || isTimeout == "timeout") ) {
requestDone = true;
+
+ // clear poll interval
+ if (ival) {
+ clearInterval(ival);
+ ival = null;
+ }
+
var status;
try {
status = jQuery.httpSuccess( xml ) && isTimeout != "timeout" ?
s.complete(xml, status);
// Stop memory leaks
- xml.onreadystatechange = function(){};
- xml = null;
+ if(s.async)
+ xml = null;
}
};
- xml.onreadystatechange = onreadystatechange;
+
+ // don't attach the handler to the request, just poll it instead
+ var ival = setInterval(onreadystatechange, 13);
// Timeout checker
if ( s.timeout > 0 )
}
}, s.timeout);
- // save non-leaking reference
- var xml2 = xml;
-
// Send the data
try {
- xml2.send(s.data);
+ xml.send(s.data);
} catch(e) {
jQuery.handleError(s, xml, null, e);
}
onreadystatechange();
// return XMLHttpRequest to allow aborting the request etc.
- return xml2;
+ return xml;
},
handleError: function( s, xml, status, e ) {