Put it in jsfiddle.net, and paste back the link.

O.

On Mar 26, 2011, at 11:06 PM, Brandon wrote:

> I'm building a pretty simple site that pulls images from a Flickr
> photo set using their API and Request.JSONP. The site figures out how
> many images will fit on a screen, adds a few more and makes my initial
> request...which works fine. When a user scrolls down the page I want
> to "lazy load" the next page of images. I'm using the ScrollSpy class
> by David Walsh to detect when the user gets to the bottom of the page
> and fire my request again. The request fires but something is wrong in
> the response as all I get back is "Error: flickrData.photoset is
> undefined". This only happens when I use variables to set both the
> page number I'm requesting as well as the amount per page. For
> example:
> 
> Gives error message on any request other than 1st:
> this.request.send({
>       data: {
>               method:         'flickr.photosets.getPhotos',
>               api_key:                'API Key Goes Here',
>               photoset_id:    '72157624479837539',
>               format:                 'json',
>               nojsoncallback: '1',
>               page:           this.page,
>               per_page:               this.perPage
>       }
> });
> 
> Works fine...but obviously loads the same data over and over
> this.request.send({
>       data: {
>               method:         'flickr.photosets.getPhotos',
>               api_key:                'API Key Goes Here',
>               photoset_id:    '72157624479837539',
>               format:                 'json',
>               nojsoncallback: '1',
>               page:           1,
>               per_page:               42
>       }
> });
> 
> Below is my full code. I left out the source for ScrollSpy to save
> room seeing that's not an issue here. Any help or tips would be
> greatly appreciated. I don't have a working sample up, but if anyone
> needs one I can certainly post one up. Thanks.
> 
> var FlickrFeed = new Class({
> 
>       Implements: [ Options ],
> 
>       options: {},
> 
>       initialize: function( options )  {
> 
>               // Set options
>               this.setOptions( options );
> 
>               // 240x179 LI element size
>               var winWidth    = window.getSize().x - 40;      // 40px 
> combined left/
> right padding
>               var winHeight   = window.getSize().y - 190; // 190px top padding
>               var perRow      = Math.floor( winWidth / 240 );
>               var perScreen   = Math.floor( winHeight / 179 );
> 
>               this.spy                = null;                                 
>                         // ScrollSpy Instance
>               this.page               = 1;                                    
>                         // Default page number
>               this.perPage    = perRow * perScreen + ( perRow * 3 );  // 
> Total per
> page
>               this.request    = new Request.JSONP({
>                                                       url: 
> 'http://api.flickr.com/services/rest/',
>                                                       callbackKey: 
> 'jsoncallback',
>                                                       onComplete: 
> this.receiveData.bind( this )
>                                               });
> 
>               // Time to fetch the data from the Flickr API
>               this.fetchData();
> 
>       },
> 
>       fetchData: function() {
> 
>               this.request.send({
>                       data: {
>                               method:         'flickr.photosets.getPhotos',
>                               api_key:                'API Key Goes Here',
>                               photoset_id:    '72157624479837539',
>                               format:                 'json',
>                               nojsoncallback: '1',
>                               page:           this.page,
>                               per_page:               this.perPage
>                       }
>               });
> 
>       },
> 
>       receiveData: function( response ) {
> 
>               var flickrData  = response;
>               var photos      = flickrData.photoset.photo;
>               var total               = flickrData.photoset.total;
>               var totalPages  = flickrData.photoset.pages;
> 
>               /*
>               HTML Structure
>               <li>
>                       <a href="##"><img src="" width="240" alt="fpo"></a>
>               </li>
>               */
> 
>               photos.each( function( element, i ) {
> 
>                       var title               = element.title;
>                       var titleArray  = title.split( ':' );
>                       var thumbList   = new Element ( 'li' );
>                       var imageAnchor = new Element( 'a', {
> 
>                               'href':         'http://farm'  + element.farm + 
> '.static.flickr.com/' +
> element.server + '/' + element.id + '_' + element.secret + '.jpg',
>                               'title':        titleArray[0] + '::' + 
> titleArray[1],
>                               'rel':  'lightbox[set1]'
> 
>                       });
>                       var thumbImg    = new Element( 'img', {
> 
>                               'width':        '240',
>                               'alt':  element.title,
>                               'src':  'http://farm' + element.farm + 
> '.static.flickr.com/' +
> element.server + '/' + element.id + '_' + element.secret + '_m.jpg'
> 
>                       });
> 
>                       thumbImg.inject( imageAnchor );
>                       imageAnchor.inject( thumbList, 'top' );
>                       thumbList.inject( $( 'gallery' ) );
> 
>               });
> 
>               // Mediabox
>               //Mediabox.scanPage();
> 
>               // Initialize ScrollSpy
>               this.initScrollSpy();
> 
>       },
> 
>       initScrollSpy: function() {
> 
>               this.spy = new ScrollSpy({
>                       container:      window,
>                       min:            window.getScrollSize().y - 
> window.getSize().y  - 100,
>                       onEnter:        function() {
>                               // Increment page count
>                               this.page++;
>                               // Fetch the next page worth of images
>                               this.fetchData();
>                       }.bind( this )
>               });
> 
>       }
> 
> });
> 
> var flickrFeed        = null;
> 
> window.addEvent( 'domready', function() {
>       flickrFeed = new FlickrFeed();
> });

Reply via email to