Eric, anyone can come up with a solution. But if we strictly talking about jQuery and using it in an optimized, reliable, maximum support possible, then no.
I think the patch I illustrated resolves the issues. Overall, my thoughts are: 1) Not defining the readystatechange, the protocol is run synchronously. You put more pressure on the user agent by doing this. Which is fine, if the developers wants to do that, but jQuery is forcing XmlHttpRequestion() synchronous operations always, 2) The capture of states in indeterminate. With jQuery's implementation, it is erronounsly emulation a call back with the timer, but "peeking" into the instantiated XmlHttpRequest object. Without using locks, this is fundamentally a flawed designed bound to bite you and/or give youi intermittent "odd" behavior or inconsistent results. 3) It ignories the state machine of the protocol and any optimize/ improvings it may do, and/or any future transparent considerations it may make, i.e, fix a leak, optimze it, etc. Take a look the WC3.ORG specification: http://www.w3.org/TR/XMLHttpRequest/ You (speaking in general) don't want to go against the described protocol state machine (the flow and steps). You want to work with it because that is how each conforming user agent (browser) MUST behave. Here is the key statement: "User agents may optimize any algorithm given in this specification, so long as the end result is indistinguishable from the result that would be obtained by the specification's algorithms." In other words, jQuery MUST conform to the specification protocol design expectation. Just consider the following example provided at the W3.ORG site.. You can't do this in jQuery:: if(this.readyState == 3) { print(this.getAllResponseHeaders()); } because the jQuery external method skips loading.step (3). Also, it appears jQuery is calling xml.open before establishing any call back. This seems to go against the written specification. Any callback should be established before the protocol is initiatiated with open. In short, by introducing a timer, the design alters the protocol specification and fundamentally violated one of the basic principles in multi-threaded and sychronronization designs. Sychronization 101 preaches "Thou shall not use Timers" to sychronize events. In this case, it using "time" to take a snapshot of a state that might have come and gone - scary! The only reason it appears to work is because jQuery is using the minimum resolution in intel machines called the quantum (10 -15 ms depending on the CPU type). This allows it to appear to it is sychronized in round robin fashion. In other words, it is illusion that it appears to work. I wonder what will happen if you lowered the resoluition to 1ms which in Windows can be done using BeginPeriod and EndPeriod mult-media functions. That might give further strenghten that it may work fine because the user-agent is now getting more context-switching. But its worth checking because this would only go to show how using the timer makes the design extremely sensitive to all kinds of unknowns. Finally, the idea of memory leaks issues is a non-issue. If it is a bug, its a bug and the vendors should be told about it. But the solution, I don't think was appropriate. I could be completely off base, but I find it hard ot believe this is "required." It is just goes against my grain to see a timer like this, why? To fix a leak? I will venture that this may contribute to some of the timer/event firing issues that may be "serendipitously" reported here. -- Hector Santos, CTO http://www.santronics.com http://santronics.blogspot.com (personal bog) Wildcat! Interactive Net Server (RPC C/S Intranet Hosting System) Wildcat! Sender Authentication Protocol (AVS system). iFTP (Intelligent FTP) Silver Xpress Offline Mail System Platinum Xpress Frontend Mailer (P2P) On Aug 25, 3:58 pm, "Erik Beeson" <[EMAIL PROTECTED]> wrote: > Couldn't you just use beforeSend to intercept the XMLHttpRequest > object and add your own callback handlers to it directly? You'll have > to put up with all of the aforementioned memory leak issues, but you'd > get access to all of the state changes that you're looking for... > > --Erik > > On 8/25/07, Pops <[EMAIL PROTECTED]> wrote: > > > > > Dan, > > > Thats exactly how I do look at code - always. I am a commercial > > developer. Products are used across the board. It is was one reason > > we avoided using javascript for many years (or atleast not these more > > advanced levels). > > > In this case, I don't think setting a timer and bypassing the > > implemented xmlhttpRequest() state machine protocol would work > > consistently. To illustrate my point, you already get different > > behavior on what states are skipped and changing the frequency will > > give you different behavior. > > > On the other hand, each protocol is designed to behave to provide each > > state and it must be signaled - otherwise it is really broken and > > something the vendor must address pronto. That should not be jQuery's > > responsibility. > > > In my products development experience, when you begin to "kludge" in > > solutions to get around a specific vendor problem, while that may work > > in the interim, that generally invites inconsistencies. jQuery is > > not cross browser ready in my opinion. Far too many items are not > > being tested well enough with IE. > > > Of course, whats fundamentally different is the open source > > mentality. The idea of using open source is relatively new for me. > > All the old reasons for not using it, are the same if you catch my > > drift. Yet, that is the way it is today. Can't no longer ignore it. > > So it takes a different mindset to get use to it - the idea of > > accepting lower quality software "as is" (and I am not saying jQuery > > is low quality) than what it normally would expected to be in a > > commercial environment. Of course, being that is open source, give > > the community the power to analyze the code - and I can't help myself, > > its in my nature to look at these things. > > > You know whats difference? > > > Unlike the past with free software, no longer are you seeing the > > proverbial - "Its free, stop complaining." <g> > > > So thas good atleast - the "professionalism" is growing in the open > > source world. > > > -- > > HLS > > > On Aug 24, 10:17 pm, "Dan G. Switzer, II" <[EMAIL PROTECTED]> > > wrote: > > > Pops, > > > > >Ok, there is always a reasons for something. I appreiciate you taking > > > >the timeout to share it. > > > > One thing to keep in mind is that jQuery is intended to be a cross-browser > > > library. Just because the XHR object works one in one browser, does not > > > mean > > > it works correctly in all the browsers on all platforms. > > > > The goal is to provide a consistent behavior across all browsers and > > > platforms whenever possible. > > > > Just keep that in mind when looking at code... > > > > -Dan