I'll have to disagree with you. Using document.write for such a
trivial task is not the way to keep your code clean. I'm much more
into something like:

$.getJSON('readimages.php', {imagefolder: folderName, imageprefix:
imagePrefix}, function(images){
      $(images).each(function(){
             $(this).doSomething();
      });
});

And this could also be ran outside ready(), saving the result set in a
variable.

(if the 'random' parameter is not being used elsewhere in the script,
it could/should be generated server-side)

cheers,
- ricardo

On Nov 30, 3:12 am, "Michael Geary" <[EMAIL PROTECTED]> wrote:
> If the XML is really that simple, then the JSON format can be even simpler.
> Just use an array:
>
> [ "onr_fc2.jpg", "onr_fc2.jpg", "onr_fc2.jpg", "onr_fc2.jpg" ]
>
> Then your code looks like:
>
>   success: function( files ) {
>      for( var i = 0;  i < files.length; ++i )
>         do_something( files[i] );
>   }
>
> As you can see, JSON is nothing more than the native JavaScript literal
> format for objects, arrays, and simpler data types such as strings and
> numbers. Because it is the native JavaScript format, there is no parsing
> required - the JavaScript interpreter already knows how to parse it, and you
> can access object properties and array elements directly.
>
> But here is a much better solution. Since you are loading this data file
> once when the page loads, simply have readimages.php generate a complete
> JavaScript statement:
>
> var imageList = [ "onr_fc2.jpg", "onr_fc2.jpg", "onr_fc2.jpg", "onr_fc2.jpg"
> ];
>
> Then remove your $.ajax call from the $(document).ready() function, and
> replace this statement:
>
>     var imageList = [];
>
> with:
>
>     document.write(
>         '<script type="text/javascript" src="readimages.php?',
>             'imagefolder=', folderName, '&',
>             'imageprefix=', imagePrefix, '&',
>             'random=', Math.random()*99999,
>         '">',
>         '<\/script>'
>     );
>
> Note that this code goes outside the $(document).ready() function. Where you
> have the var imageList = [] is a perfect place to put it.
>
> Then you will have your imageList filename array ready to use without any
> Ajax downloads or XML parsing. This will avoid any possibility of locking up
> the users's browser (and other browser windows) while the page loads. It's a
> lot simpler and better for the user too.
>
> -Mike
>
>
>
> > From: Jeffrey Kretz
>
> > Well, it was a bit of a pain to step through, as it was
> > minimized jquery -- the full uncompressed version is much
> > better for debugging.
>
> > But as I stepped through, the success method did actually fire.
>
> > The problem was that $(xml).find('file') did not return any results.
>
> > I've never used jQuery to traverse XML nodes, so maybe
> > someone else can help.  Here was the XML result I got:
>
> > <?xml version="1.0" encoding="iso-8859-1"?> <filelist>
> >   <file>onr_fc2.jpg</file>
> >   <file>onr_whd.jpg</file>
> >   <file>onr_lbp.jpg</file>
> >   <file>onr_egwt.jpg</file>
> >   <file>onr_mpr.jpg</file>
> >   <file>onr_fifa.jpg</file>
> >   <file>onr_waw.jpg</file>
> >   <file>onr_main.jpg</file>
> >   <file>onr_r2.jpg</file>
> > </filelist>
>
> > But as Mike said, json would be an easier way to do it.  The
> > data would look something like this:
>
> [{file:'onr_fc2.jpg'},{file:'onr_fc2.jpg'},{file:'onr_fc2.jpg'},{file:'onr_f
> c2.jpg'}]
>
>
>
> > jQuery would then use eval() to convert that into an array of
> > objects.  Your success function would do something like this:
>
> > success:function(files){
> >    for (var i=0;i<files.length;i++)
> >    {
> >       do_something(files[i].file);
> >    }
> > }
>
> > JK
>
> > -----Original Message-----
> > From: jquery-en@googlegroups.com
> > [mailto:[EMAIL PROTECTED] On Behalf Of David Andrews
> > Sent: Saturday, November 29, 2008 7:25 PM
> > To: jquery-en@googlegroups.com
> > Subject: [jQuery] Re: .ajax and ie7?
>
> > Thanks Mike and JK,
>
> > A sample url is here..
>
> >www.foobar.me.uk/test/example.htm
>
> > To answer your questions:
>
> > 1. This does seem to be required as it loads the image names
> > into an array which is then used to populate the image src in
> > the DOM. If I leave async true then I get empty images for
> > the first couple of transitions.
>
> > 2. Thanks for the tip on JSON - not familiar with it but will
> > do some research - cheers.
>
> > -----
>
> > If you open the above link in firefox then you will see some
> > image transitions based on an array populated from my ajax
> > request - in IE that array does not get populated as it looks
> > like the ajax request is not getting called.
>
> > Also - don't get me wrong I'm not anti IE - just asking! ;)
>
> > Cheers
> > Dave
>
> > -----Original Message-----
> > From: jquery-en@googlegroups.com
> > [mailto:[EMAIL PROTECTED] On Behalf Of Michael Geary
> > Sent: 30 November 2008 03:10
> > To: jquery-en@googlegroups.com
> > Subject: [jQuery] Re: .ajax and ie7?
>
> > Of course Ajax works in IE. IE is the browser that invented
> > Ajax (XMLHttpRequest)!
>
> > Troubleshooting a code snippet is a lost cause. ;-) Can you
> > post a link to a test page?
>
> > A couple of tips, not directly related to the IE problem...
>
> > async: false is an extreme measure that should be avoided if
> > possible. It locks up the user interface of all browsers
> > running in the same thread. Do you have to do that?
>
> > It sounds like you are in control of the PHP code that
> > generates the XML, is that right? If so, you would be better
> > off generating JSON instead of XML.
> > It's easier to work with JSON, and much faster too.
>
> > -Mike
>
> > > From: David Andrews
>
> > > Hello all,
>
> > > I am using .ajax to populate an array via a PHP generated XML file
>
> > > //snip
>
> > > $.ajax({
> > >               url : "readimages.php",
> > >               async : false,
> > >               data : "imagefolder=" + folderName + "&imagePrefix=" +
> > imagePrefix,
> > >               success : function(xml)
> > >               {
> > >                        $(xml).find('file').each(function()
> > >                        {
> > >                               imageList.push($(this).text());
> > >                        });
> > >               }
> > >       });
>
> > > This works perfectly in FF but the success function does not get
> > > called when run in IE7... should this code work ok or is IE a lost
> > > cause?
>
> > > Cheers
> > > Dave

Reply via email to