Ignore my previous laziness, i went ahead filed a feature request along with a suggested patch:
http://dev.jquery.com/ticket/4964 Adds support for a ready callback and for status code specific callbacks to supersede any generic 'success' or 'error' ones. On Thu, Jul 23, 2009 at 5:24 PM, Nathan Bubna<nbu...@gmail.com> wrote: > On Thu, Jul 23, 2009 at 5:06 PM, Nathan Bubna<nbu...@gmail.com> wrote: >> On Thu, Jul 23, 2009 at 3:57 PM, Julian Aubourg<aubourg.jul...@gmail.com> >> wrote: >>> I really, really like what you did here, Nathan. >> >> thanks. >> >>> Behavior of $.ajax could >>> be: option[response.code] ? option[response.code](infos) : error(infos) >>> So basically, any response code that is not 200 is considered an error BUT >>> you can specify a specific error callback per type of response. Would that >>> be really difficult to implement? >> >> actually, i think any status (>=200 && < 300) || 304 is considered >> successful. 204 is really only an error for dataType:json for now. >> this is one of the reasons why i handle json processing myself in my >> Rest plugin. when calling the plugin's functions, 204 is successful >> and null is passed for the data. >> >> as for supporting the status code specific handlers, i imagine both >> the internal success and handleError functions would have to check for >> a status code specific handler before calling the provided 'success' >> or 'error' ones. i can't imagine why that would be difficult from my >> cursory glance over the jQuery code. both have access to the options >> and the xhr, so it should be a very simple change. though, i'm not >> set up to hack on jQuery itself yet, so i can't make a proper patch at >> the moment. > > hmm. i just realized that while this would be a handy addition to > jQuery, it would make it very difficult for my plugin to wrap behavior > around ajax callbacks. it's not hard to watch the options for > 'success' and 'error'; watching for those and all the possible status > codes would be unpleasant. if such a feature were added, it'd be > nice to also have an extension hook added for before the "winning" > callback is executed that would give me a chance to identify the > status code and wrap the callback for it, before it was executed. > perhaps named 'ready' that was always called before the "winning" > callback in the same way 'complete' is always called afterward? it > would probably just need the xhr as an arg. honestly, that would be > very handy regardless of whether support for status code specific > callbacks was added or not. > >>> 2009/7/23 Nathan Bubna <nbu...@gmail.com> >>>> >>>> On Wed, Jul 22, 2009 at 4:42 PM, Justinvh<justi...@gmail.com> wrote: >>>> > >>>> > Heh, well... >>>> > >>>> > If we define a successful response as one defined by HTTP/1.1 >>>> > standards, then any 2xx/3xx based response should be considered >>>> > successful. However, I can see that if you are interacting with a >>>> > layer such as $.ajax() that specified an expected dataType as a return >>>> > that it should reasonably error to some degree. >>>> > >>>> > It is definitely a tangential issue - And is most likely apparent to >>>> > any RESTful applications that would rely on status codes to manipulate >>>> > client-side interaction. >>>> >>>> agreed. >>>> >>>> > Perhaps, a solution would be to have the option of defining callbacks >>>> > per status code. >>>> > >>>> > E.g. $.ajax(..., { >>>> > 'onStatusCode': >>>> > { '200': { >>>> > 'dataType': 'json', >>>> > 'success': function(data) { }, >>>> > 'error': function(data) { } >>>> > } >>>> > '204': { >>>> > 'success': function () { >>>> > } >>>> > } >>>> > } >>>> > } >>>> >>>> i've got something like this in my rest plugin >>>> (http://plugins.jquery.com/project/rest). it's still a young plugin, >>>> but it's already made using jQuery ajax with REST services much, much >>>> easier. it would look something like this for a delete call: >>>> >>>> $.Delete('/groups/@me/foo', { >>>> success: function(data) { //do stuff }, >>>> 204: 'success' // or a function of its own >>>> }); >>>> >>>> since you seem to be working in the same space, i'd love your feedback >>>> on the plugin, if you've got the time. >>>> >>>> > - Or something that degree that would allow a 'lower-level' of >>>> > interaction with how $.ajax() would handle responses. >>>> > >>>> > On Jul 22, 4:26 pm, John Resig <jere...@gmail.com> wrote: >>>> >> I guess that's a tangential issue, not really related to JSON - if a >>>> >> server >>>> >> returns a 204 (with no content) should we call success with a null or >>>> >> undefined data argument? >>>> >> >>>> >> At the moment I think that's far more likely that when you do a >>>> >> request, and >>>> >> you're expecting something (JSON, XML, etc.) and you don't get it (204 >>>> >> or >>>> >> not), that it should not count as a success. I'd be willing to tweak >>>> >> the >>>> >> docs to represent that. Of course, I'm willing to be convinced >>>> >> otherwise. >>>> >> >>>> >> --John >>>> >> >>>> >> On Wed, Jul 22, 2009 at 7:10 PM, Justinvh <justi...@gmail.com> wrote: >>>> >> >>>> >> > There is a parsererror, but the way the error callback is described >>>> >> > seems misleading. What if on a 200 response you returned JSON - But a >>>> >> > 204, being that the response code is 'NO CONTENT', would not have >>>> >> > JSON >>>> >> > in it. Should it still error? >>>> >> >>>> >> > Shouldn't the desired effect be to ignore the data inside, or is this >>>> >> > logic that should be handled as a case in dataFilter? >>>> >> >>>> >> > On Jul 22, 3:17 pm, John Resig <jere...@gmail.com> wrote: >>>> >> > > What's the error message that you are receiving? Reading through >>>> >> > > the code >>>> >> > > I'd imagine that you would receive a 'parsererror', which seems >>>> >> > appropriate. >>>> >> >>>> >> > > --John >>>> >> >>>> >> > > On Wed, Jul 22, 2009 at 3:30 PM, Justinvh <justi...@gmail.com> >>>> >> > > wrote: >>>> >> >>>> >> > > > Can someone explain me the reasoning that if a dataType is >>>> >> > > > specified >>>> >> > > > as JSON and the response code is say a 204 (NO CONTENT), that it >>>> >> > > > would >>>> >> > > > error. The way it looks, the code is expecting JSON back, but >>>> >> > > > since >>>> >> > > > there is no JSON, it fails. >>>> >> >>>> >> > > > The documentation however says that error is "A function to be >>>> >> > > > called >>>> >> > > > if the request fails." - Which makes me think that the actual >>>> >> > > > request >>>> >> > > > fails, not that the data parsed failed. >>>> >> >>>> >> > > > Maybe it's me, but it seems a bit confusing. >>>> >> >>>> >> >>>> > > >>>> > >>>> >>>> >>> >>> >>> >>> >>> >> > --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-dev@googlegroups.com To unsubscribe from this group, send email to jquery-dev+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/jquery-dev?hl=en -~----------~----~----~----~------~----~------~--~---