I'm not sure how to set up an Ajax test in the Mooshell, so here's
hoping I can explain my issue here.
I'm trying to submit form data using Form.Request, and then pass back
some javascript with the HTML that gets returned. I'd like the
Javascript to get evaluated. According to the Form.Request docs,
evalScripts defaults to "true", so this basic call should get me what
I need:
var myFormSubmit = new Form.Request(
'myForm',
'myFormContainer'
)
The data from my form is submitted correctly, and my Ajax page returns
this:
hi there
<script type="text/javascript">alert('hi');</script>
If I look at the "Response" tab in Firebug, I see that data returned.
However, the JS is not executed. Furthermore, if I use "View
Generated Source" from the Firefox plugin Web Developer, I see that
"hi there" has been written into the DOM, but my script statement is
nowhere to be seen. So, it would appear that it's getting returned
and picked up by Firebug, but then at some point after that, it
disappears. Here's hoping I'm doing something very stupid.
Any advice is appreciated.
Thanks,
hairbo
1) I thought this function was supposed to be able to handle a mix of
HTML and JS, and would be smart enough to evaluate any JS it finds in
the returned data. If this is the case (as it does appear to be),
then removing the script tag would surely break.
2) It turns out that my problem was the JS I had returned wasn't being
evaluated because it didn't recognize a Mootools class I had
instantiated. This I don't think I understand. I created a class,
like this:
var MyClass = new Class({
...bla bla bla...
});
MyClass.implement (new Options, new Events);
...then, I did this in the page:
window.addEvent('domready',function(){
var STUFF = new MyClass();
});
I expected that the JS being returned by my Ajax page would be able to
do this:
STUFF.subMethod();
...but that failed. I don't get why it failed, though, since I'm able
to just create a regular JS function on the page, and reference
*that*, like this:
function myFunction () {}
...and then my JS in the AJAX response is this:
myFunction()
Why does that second example work, and the first not work? What basic
JS principle am I missing?
Thanks.
Okay, there may be things here that I don't understand, so
apologies...
1) I thought this function was supposed to be able to handle a mix of
HTML and JS, and would be smart enough to evaluate any JS it finds in
the returned data. If this is the case (as it does appear to be),
then removing the script tag would surely break.
2) It turns out that my problem was the JS I had returned wasn't being
evaluated because it didn't recognize a Mootools class I had
instantiated. This I don't think I understand. I created a class,
like this:
var MyClass = new Class({
...bla bla bla...
});
MyClass.implement (new Options, new Events);
...then, I did this in the page:
window.addEvent('domready',function(){
var STUFF = new MyClass();
});
I expected that the JS being returned by my Ajax page would be able to
do this:
STUFF.subMethod();
...but that failed. I don't get why it failed, though, since I'm able
to just create a regular JS function on the page, and reference
*that*, like this:
function myFunction () {}
...and then my JS in the AJAX response is this:
myFunction()
Why does that second example work, and the first not work? What basic
JS principle am I missing?
Thanks for the reply. Let me just say...OMFG.
I did (and usually have done) this:
window.addEvent('domready',function(){
var STUFF = new MyClass();
});
...instead of this:
window.addEvent('domready',function(){
STUFF = new MyClass();
});
sigh. Thanks for the help
On Jan 20, 4:39 pm, Aaron Newton <aa...@iminta.com> wrote:
Is it because when defined with "var" no global variable is defined and so the class instance (STUFF) is not accessible in the HTML?
Cheers, Daniel
I learned about the importance of declaring "var" more recently than I
should have (like, only 4 years ago or so), and so I've become more of
a nazi about it. In retrospect, I suppose it should have been obvious
that declaring "var STUFF" would keep that object's scope narrow.
However, I suppose I assumed that the "domready" event was special in
some way...like, why would you *ever* want to keep variables scoped
just to that function? Probably very rarely. Anyway, it was just me
being careless.
Though...thinking back, this probably explains some of the other
headaches I've endured in the past, since I normally do say "var
STUFF" in the domready function.