views:

46

answers:

2

Ok. I have never seen anything like this before and I am quite confused... On a website I am working on, there are two JavaScript includes. (Well, many more, but the problem occurs with only two). We'll call these A.js and B.js.

A.js defines a JavaScript singleton A. Likewise B.js defines a JavaScript singleton B. The B class depends on methods from A.

I have almost all my code wrapped up in try { ... } catch { ... } blocks, and on error, the system generates an AJAX request to email me the details of the error.

On one system here in my office (Firefox 3.0 for Mac) I am seeing the strangest behavior. Once in a while, maybe once every hour or two, but with no specific pattern, I get an error email from class B: "ReferenceError: A is undefined."

I have no idea why/how A would be undefined sometimes. When I look in the apache logs, during the times I receive the error, the client is requesting /A.js, before requesting /B.js, and the server is responding with a 304 (Not Modified)

I somehow suspect the issue is that the file has expired from the client cache however the server doesnt send the file thus it is never executed and A is undefined. But that's just a guess and I don't understand why that would happen. And if I am guessing right, how do I fix it???

If it matters, mod_disk_cache was enabled on the server, and I have disabled it to see if that was causing the problem. If so, maybe this belongs on ServerFault...

Any suggestions very welcome!!

A: 

If you have the Webdevelopers toolbar installed in Firefox, activate "Disable Cache" it helps a lot on debugging.

powtac
That's a good idea. I will try that and see if the results change. Actually, the computer this is happening on does not have that toolbar but I can disable cache in `about:config`
Josh
A: 

start calling the first js function after! the page has loaded, do this by <body onload="startmyfunction()"> or similar.

powtac
Yes, I already do that. If I open Firebug on the affected computer and eval: `A`, it is undefined. So something else is at play here.
Josh