An, of course, I mispelled $.jsonp as $.json here and there, sorry about that.
2009/3/14 Julian Aubourg <[email protected]> > Sure. > $.jsonp() is a kind of $.ajax clone but specific to jsonp (your url does > not need to have an =? and/or you don't have to provide a callback function > name for it to actually do a jsonp). It also offers the possibility to abort > the request just like you would with any ajax call. > > So... > > First, and that was the main goal originally, you can have an error > callback that actually gets called if there was a network failure or > ill-formed json responded. For instance, if you test the following url: > > http://gdata.youtube.com/feeds/api/users/dcibishtho0djj77?callback=?&alt=json-in-script > $.ajax() will never notify you and you'd have a dangling script tag in your > document. $.jsonp(), on the other hand, calls the error callback as soon as > the 404 is received (no need for timeout). > > Second, when the provider imposes the name of the callback (that is you > can't override it with a url parameter). $.jonsp() will work exactly the > same, you just have to set the "callback" option to the correct value. Now > you can do that with $.ajax but the nice thing about $.jsonp is that you can > have as many jsonp calls running concurrently as you want with the exact > same callback name and there will be no collision and no need for a global > function with spaghetti code and request filtering. For instance: > $.json({ > url="url1", > callback="globalCallback", > success = function() { alert("First one"); } > }); > $.json({ > url="url2", > callback="globalCallback", > success = function() { alert("Second one"); } > }); > will work as expected no matter in which order the $.json calls are made > nor in which order the responses are received. > > Third and a nice consequence of the second point, $.jsonp(), by default, > always uses the same callback function name ("C") which means that when you > set the cache option to true, you will actually enable browser caching where > $.ajax can't by design because it auto-generates a different callback name > at each new request. > > Fourth, in case the provider is unable to issue 303 because it does not > detect the callback name hasn't changed from one call to another (a usual > design flaw in current services), you can use the pageCache option. $.jsonp > will keep a map or url => reponse and not issue a call for a url you already > requested (whether the original response was a success or an error). > > You can find examples of what I said above: > http://code.google.com/p/jquery-jsonp/wiki/TipsAndTricks > > To summarize, $.jsonp() is specifically designed with jsonp in mind based > on my own misadventures using usually browser unfriendly data apis. It > aknowledges the very different nature of a jsonp request and a traditionnal > ajax one and, rather than hacking on top of the $.ajax() function (like my > old getJSON plugin did), it provides an entirely new function which provides > the same options as $.ajax() does (as long as said options are relevant to a > jsonp request). > > Hope this clarifies a bit, > > -- Julian > > 2009/3/14 Dave Methvin <[email protected]> > > >> > Just a note to let you know I finally released my jsonp plugin for >> jquery. >> >> As of 1.3.x, $.ajax supports jsonp. Can you summarize what this plugin >> adds? >> >> >> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to [email protected] To unsubscribe from this group, send email to [email protected] For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---
