Josh and all,

I figured out a way around the issue using the ajaxStop function.
The ajaxStop event is triggered when all outstanding requests (load in
this case) are complete.
When this happens all the tables I wish to load are loaded to the
document.

My original code was trying to grab information with the load callback
function and store in a global variable.
This will not work.

Instead, I load the desired pages to a hidden element. Then when the
pages are loaded (ajaxStop event triggered), I can then process the
tables and pull out the desired information and build a new table.


There may be a better way to do this, perhaps on the server side
rather than on the client in the document. But at the moment this is
what I need.

Thanks for the help.



$('#display_merge').ajaxStop(function() {

};


On May 7, 12:31 pm, "Josh Nathanson" <joshnathan...@gmail.com> wrote:
> Well it's a little tricky because of the asynchronicity.  The way I might
> handle it is to set some kind of "isLoaded" global object that gets
> poplulated each time an async call returns.  You more or less already have
> that.  Then, create a "polling" function using setInterval or setTimeout
> that checks every 500ms or so to see if that "isLoaded" object is completely
> populated.  Once you determine that it is, then generate the combined table.
>
> -- Josh
>
> -----Original Message-----
> From: jquery-en@googlegroups.com [mailto:jquery...@googlegroups.com] On
>
> Behalf Of Stever
> Sent: Thursday, May 07, 2009 4:28 AM
> To: jQuery (English)
> Subject: [jQuery] Re:Scopingissue with load and call back function.
>
> Josh,
>
> First the firstload=0 and not resetting the variable was left off. But
> ultimately is unrelated to the asynchronous problem you pointed out.
>
> Asynchronous loading makes a big difference here.  As a pretty recent
> user of jquery, I obviously designed this code wrong.
>
> So here is what I what to do.   I have multiple web pages on a server
> that have summary result tables for different products.
> I want to read each of these summary tables and combine the results
> into one single table.
>
> My thought was to use Jquery Load to load each table and read the
> information and store into the global arrays, TableCell, TableRow and
> TableColumn.
>
> Apparently this approach is flawed.
>
> Can you or someone on this group recommend/outline a way to accomplish
> this relatively simple task?
>
> Thanks!!
>
> Steve
>
> On May 6, 7:13 pm, "Josh Nathanson" <joshnathan...@gmail.com> wrote:
> > OK it looks like you have a few things to sort out here.
>
> > One thing is that you have to remember that load is asynchronous.  So when
> > that is fired the rest of your code will continue along its merry way.  In
> > other words the loop will keep looping independent of the callback
> function
> > firing.  My hunch is that this will give you unexpected values for the
> > variable [i] in the load callback function.  Because of this you will
> > probably have to do some refactoring to get the results you're looking
> for.
> > Not sure though if you intend to run that load on every iteration of the
> > loop or just the first one.
>
> > Also you may have left this out, but I see you have a firstload = 1
> > declaration, but then you don't set it to 0.  This could also be messing
> up
> > your results as it will run every time unless you set it to 0 somewhere.
>
> > Definitely leave the variable declarations outside document ready as in
> your
> > second email.
>
> > -- Josh
>
> > -----Original Message-----
> > From: jquery-en@googlegroups.com [mailto:jquery...@googlegroups.com] On
>
> > Behalf Of Stever
> > Sent: Wednesday, May 06, 2009 4:31 PM
> > To: jQuery (English)
> > Subject: [jQuery] Re:Scopingissue with load and call back function.
>
> > Josh thanks for the quick response.
>
> > I tried putting the variables
>
> > var TableCells    =[,];
> > var TableRowName  =[,];
> > var TableColName  =[,];
> >  outside the document ready function.  Originally. (not redefined with
> > var inside document ready shown here).
>
> > <script type="text/javascript" src="http://www.hou.asp.ti.com/
> > sparcit_data_reports//js/jquery.js"></script>
> > <script type="text/javascript">
> > var devList  = [
> >                 "PART_1"
> >                ];
>
> > var TableCells    =[,];
> > var TableRowName  =[,];
> > var TableColName  =[,];
>
> > $(document).ready(function(){
> >   $.ajaxSetup({cache: false}) ;
> >   var firstLoad = 1;
> >   for( var i =0; i < devList.length; i++)
> >   {
> >     // set the path
> >     var path = url + devList[i] ;
> >    var colName =[];
> >    var rowName =[];
> >    var cellValue = [];
>
> >     //load the page but collect the table info
> >     if (firstLoad == 1)
> >     {
> >       $('#display').load(path,
> >          function(){
> >                              manipulate tables and put data in Global
> > Array
>
> >                                   TableCells[i]   = cellValue;
> >                                   TableRowName[i] = rowName;
> >                                   TableColName[i] = colName;
>
> >       });
> >        var lenTable2 = TableColName[i].length;
>
> >     }
> >   }
>
> > });
>
> > So where I try to access the new length of TableColName[i]  I get that
> > this variable is undefined.
>
> > Actually while debugging, I find that variable i defined in the loop
> > outside the load, is NOT available inside the load function.
>
> > It is all very confusing.
>
> > :-(
>
> > On May 6, 6:10 pm, "Josh Nathanson" <joshnathan...@gmail.com> wrote:
> > > When you say you get undefined outside the load function, do you mean
> > > outside $(document).ready, or inside $(document).ready?
>
> > > They should not be accessible outside document.ready, because of the
> > closure
> > > caused by passing the anonymous function to document.ready, and because
> > you
> > > use var to declare them inside that function.
>
> > > If you want them to be accessible globally, you'll have to declare them
> > > outside document.ready.
>
> > > -- Josh
>
> > > -----Original Message-----
> > > From: jquery-en@googlegroups.com [mailto:jquery...@googlegroups.com] On
>
> > > Behalf Of Stever
> > > Sent: Wednesday, May 06, 2009 3:54 PM
> > > To: jQuery (English)
> > > Subject: [jQuery]Scopingissuewith load and call back function.
>
> > > I am a relative newbie to Jquery and I am getting somescopingissues
> > > I can't figure out.
>
> > > I was hoping for some advice.
>
> > > Basically I am trying to load multiple documents that have HTML tables
> > > and then parse the tables and redisplay in a new format. Merging
> > > elements from the different documents.
>
> > > So basically I build the url path for a set of "devices"  and load
> > > them. I thought in the load function I could collect elements into
> > > global variables and manipulate in the final document. But is not
> > > working.
>
> > > The variables TableCells, TableRowName and TableColName are what I
> > > haveissueswith.
>
> > > $(document).ready(function(){
> > >   $.ajaxSetup({cache: false}) ;
>
> > >   var TableCells    =[,];
> > >   var TableRowName  =[,];
> > >   var TableColName  =[,];
>
> > >  for( var i =0; i < devList.length; i++)
> > >   {
> > >     // set the path
> > >     var path = prefix + yield_dir + devList[i] +'/' + smslot_yield;
> > >     //clear the display area
> > >     $('#display').html("");
>
> > >    var colName =[];
> > >    var rowName =[];
> > >    var cellValue = [];
>
> > >     //load the page but collect the table info
> > >     if (firstLoad == 1)
> > >     {
>
> > >       $('#display').load(path,
> > >                                function(){
>
> > >                                  manipulate tables and put data in
> > > Global Array
> > >                                   TableCells[i]   = cellValue;
> > >                                   TableRowName[i] = rowName;
> > >                                   TableColName[i] = colName;
>
> > >                                 });
> > >     }
> > >   }
> > > });
>
> > > So the variables are defined in the document ready scope. (I even
> > > tried outside that as well)
> > >  var TableCells    =[,];
> > >  var TableRowName  =[,];
> > >  var TableColName  =[,];
>
> > > I set these variables in the load function scope and they are
> > > accessible there and work fine.
>
> > > However when I try to access outside the load function the variables
> > > are undefined.
>
> > > Can you tell what I am missing?
>
> > > Thanks,
>
> > > Steve

Reply via email to