I probably shouldn't have suggested using alert() since it actually can
affect the order of execution in an odd way. (The code immediately below the
alert call won't execute until you close the alert, but other code in the
page could execute during that time in some cases.)
 
So stick with console.log() for this kind of tracing. I would just start
putting console.log('xyz',gNewStoryTITLE) calls before/after every line of
code (where you give each one a different 'xyz' to distinguish them), and
see exactly where it goes wrong.



  _____  

From: Rick Faircloth


This is part of a content management system for a client, so it's not

publicly accessible.if it appears I can't solve the problem otherwise,

I'll set up a test case based on the code that is publicly accessible.

 

However, here's the relevant code from the app that shows what I'm

doing:  (and just so you're not confused, I've swapped from using

the gNewStoryID variable to gNewStoryTITLE variable, but the usage

is exactly the same)

 

>From the AJAX success section in which the global variable is set:

 

success:  function(response) {

                        if (response.MESSAGE == 'Success' )

                            {gNewStoryTITLE = response.TITLE;

                              alert(gNewStoryTITLE);    <--- variable shows
up here with correct value

                              fnCreateStorySuccessResponse();}

 

So you can see that the fn in which I'm going to use the new global variable

is being called *after* the global var is established, in
fnCreateStorySuccessResponse().

 

fnCreateStorySuccessResponse consists of this code:

(it has more lines than below, but they are irrelevant and don't involve the
variable)

 

$('#newStoryTitleSPAN').empty().append(gNewStoryTITLE); 

 

The gNewStoryTitle variable shows up in the specified Span correctly, but
then firebug

immediately throws and "gNewStoryTITLE is not defined" error.

 

Actually, from observing the sequence of events on the screen, even after
removing the

alert(gNewStoryTITLE); from the sequence, it almost appears as if the

sequence of events is firing out of sequence that is specified above.

 

The error message is actually showing up in firebug before the
gNewStoryTitle value

gets displayed on-screen in the span, which happens when
fnCreateStorySuccessResponse()

is triggered.

 

It's as if fnCreateStorySuccessResponse() tries to use the variable before
it is set, then

after the error message is displayed, the variable is finally set and

properly displayed on-screen.  But that doesn't make sense.

 

Shouldn't the order of statements in the success: section of the ajax
fuction occur

sequentially?

 

Rick

 

From: jquery-en@googlegroups.com [mailto:jquery...@googlegroups.com] On
Behalf Of Michael Geary
Sent: Monday, April 06, 2009 1:37 PM
To: jquery-en@googlegroups.com
Subject: [jQuery] Re: Trying to understand how to use global variables...

 

It would be easier if you had a link to a test page or at least some code to
look at. Otherwise we can only guess what might be wrong.

 

Here is one possibility.

 

Note what you said here:

 

> ...by using gNewStoryID = response.STORY_ID, I was creating a

> global variable that could then be used in any function.

 

(emphasis added)

 

You are exactly right: First you create the global variable with the
assignment statement, and then you can use it.

 

The question is, when is then?

 

The global variable is created when your callback function executes.

 

These other functions where you're trying to use it: Are they being called
before the callback function executes, or after? If you put alert() or
console.log() calls wherever you set or reference your global variable, what
order do they appear in?

 

-Mike

 


  _____  


From: Rick Faircloth

I've read up on the subject, but my application is showing that

my understanding has gaps.

 

If I have an ajax function that in the returned "response" exists

a value called "response.STORY_ID" and I used the statement in the

success section of the ajax function, gNewStoryID = response.STORY_ID,

and then alert(gNewStoryID), I do get the property ID returned in the alert.

 

Now I want to use that variable, gNewStoryID, in other functions.  My
understanding

was that, by using gNewStoryID = response.STORY_ID, I was creating a global
variable

that could then be used in any function.

 

However, when I try to use the gNewStoryID in another function, for
instance,

$('#newStoryIDSpan').empty().append(gNewStoryID);

I get an error stating "gNewstoryID is not defined".

 

Where is my understanding in complete?  I was think that a global javascript
variable

would be available through the application as is a ColdFusion session
variable.

 

Thanks for helping me understand!

 

Rick

----------------------------------------------------------------------------
-----------------------------------------------------------

"It has been my experience that most bad government is the result of too
much government." - Thomas Jefferson

 

Reply via email to