So it was pure #2 obviously, not #1. 2009/12/29 Julian Aubourg <aubourg.jul...@gmail.com>
> Again, why not do this with an Accept header? >> >> Client sends acceptable content types, server responds with a content >> type, if the server's response is one of the accepted types, jQuery >> processes accordingly, if not, jQuery returns data unprocessed. >> >> The dataType option should be for things that aren't necessarily well >> communicated via content-type alone, like JSONP, or anything else that >> modifies the nature of the request, not just the content type. >> >> If you're worried about your server sending malicious javascript, then >> only accept text/plain or text/xml (even dataType: 'html' isn't safe since >> it executes script blocks). If you don't care, then accept "*/*". >> > > > There are a couple of reasons why an accept / content-type system is not > that simple: > 1) When not specifying a dataType, accept is */* (which makes sense since > we don't expect a particular dataType) while current behaviour is to > autodetect xml against text (or, maybe, in future extensions, to autodetect > any type). The only workaround if you're basing your tests around the accept > header would be to associate all of the xx/yy possibilities known to men > with their corresponding dataType. The behaviour, as it is now, is to group > correspondance from content-type to dataType using simple regexps (ie /xml/, > /json/) which I find much more efficient and not too configuration heavy. > 2) It still doesn't address the issue of specifying a set of accepted > dataTypes just with the dataType property (which is a much better > abstraction than setting content-type headers in a beforeSend callback or > globally adding accepted types in ajaxSettings). > > I'm beginning to wonder if we're not buzzing for nothing with this > conversation. Actually, not specifying a dataType could very well behave as > a guess-anything system. In analogy to what you said with content-type, > setting a dataType will prevent any automatic decision, so existing code > that would be impacted by automatic json evaluation would just have to add > the dataType option, something I don't see as such an atrocious maintenance > task it would require some heavy-weight system in jQuery. > > So, the more I think about it, the more I'm in favor of #1. > > 2009/12/28 Erik Beeson <erik.bee...@gmail.com> > > Again, why not do this with an Accept header? >> >> Client sends acceptable content types, server responds with a content >> type, if the server's response is one of the accepted types, jQuery >> processes accordingly, if not, jQuery returns data unprocessed. >> >> The dataType option should be for things that aren't necessarily well >> communicated via content-type alone, like JSONP, or anything else that >> modifies the nature of the request, not just the content type. >> >> If you're worried about your server sending malicious javascript, then >> only accept text/plain or text/xml (even dataType: 'html' isn't safe since >> it executes script blocks). If you don't care, then accept "*/*". >> >> Or am I missing something? >> >> --Erik >> >> >> On Mon, Dec 28, 2009 at 12:51 PM, Rick Waldron <waldron.r...@gmail.com>wrote: >> >>> I can compromise with your #2, and give them both my vote. >>> >>> Passing it on... >>> >>> >>> *1. Allow $.ajax() to accept multiple expected dataTypes. >>> >>> 2. Setting to have $.ajax() auto-detect/translate via response >>> content-type >>> header.* >>> >>> >>> >>> Julian - your thoughts? >>> >>> >>> >>> On Mon, Dec 28, 2009 at 3:39 PM, webbiedave <webbied...@websiteguard.com >>> > wrote: >>> >>>> Rick, your 1 (which I too have suggested in the past) might bring about >>>> unease as folks would prefer any eval-ing to come through explicit >>>> request. >>>> I also think it's imperative that the behavior of any dataType setting >>>> (including null) shouldn't change (especially to one that suddenly >>>> evals!). >>>> But that's just my opinion. My 1, 2 would be: >>>> >>>> 1. Allow $.ajax() to accept multiple expected dataTypes. >>>> >>>> 2. Setting to have $.ajax() auto-detect/translate via response >>>> content-type >>>> header. >>>> >>>> >>>> >>>> On Mon, 28 Dec 2009 15:03:22 -0500, Rick Waldron < >>>> waldron.r...@gmail.com> >>>> wrote: >>>> >> >>>> >> We're struggling with the best way to inform .ajax() that we expect >>>> >> multiple data types. Either, with a setting like "auto" or by passing >>>> an >>>> >> array of data types (or maybe allowing both). >>>> >> >>>> > >>>> > Perhaps it would help if we defined a list of goals. I'll start. >>>> > >>>> > 1. $.ajax() - if dataType has not been defined in the argument list, >>>> > $.ajax() should respect the returned Content-type header and translate >>>> > accordingly. >>>> > >>>> > 2. .... >>>> > >>>> > >>>> > Fill it in! >>>> > >>>> > >>>> > >>>> > >>>> > Rick >>>> > >>>> > >>>> > >>>> > >>>> > >>>> > On Sun, Dec 27, 2009 at 7:41 PM, <webbied...@websiteguard.com> wrote: >>>> > >>>> >> We're struggling with the best way to inform .ajax() that we expect >>>> >> multiple data types. Either, with a setting like "auto" or by passing >>>> an >>>> >> array of data types (or maybe allowing both). >>>> >> >>>> >> >>>> >> On Sun, 27 Dec 2009 12:02:54 -0800, Erik Beeson < >>>> erik.bee...@gmail.com> >>>> >> wrote: >>>> >> > Seems like a lot of awkward wheel reinventing going on here. >>>> Content >>>> >> > type negotiation is a feature of HTTP; is there a reason we aren't >>>> >> > using it? >>>> >> > >>>> >> > --Erik >>>> >> > >>>> >> > >>>> >> > On Saturday, December 26, 2009, webbiedave >>>> >> > <webbied...@websiteguard.com> >>>> >> > wrote: >>>> >> >> "Following your idea that a library has to keep exactly the same >>>> >> >> behavior from versions to versions [...] then what happens if & >>>> when >>>> >> >> jQuery introduces a new auto-detectable dataType in 1.4.1" >>>> >> >> >>>> >> >> Things could break *without* the introduction of new >>>> auto-detectable >>>> >> >> types. If you use "auto" and are only handling json and html and >>>> >> >> suddenly javascript is returned, that javascript will be eval'd >>>> and >>>> >> >> things will will not turn out well. That's why you can't use >>>> "auto" >>>> on >>>> >> >> untrusted/incompetent servers. That's the whole point of "auto". >>>> You >>>> >> >> are trusting the server to return the correct data. Use at your >>>> own >>>> >> >> risk. But it's there if you need it. >>>> >> >> >>>> >> >> Having said that, #1 in my suggestions is passing an array >>>> (dataType: >>>> >> >> ["json", html"]). >>>> >> >> >>>> >> >> >>>> >> >> >>>> >> >> On Dec 26, 6:41 pm, Julian Aubourg <aubourg.jul...@gmail.com> >>>> wrote: >>>> >> >>> > As I mentioned in my previous >>>> >> >>> > post, one of this approach's downside is "null vs auto" >>>> confusion >>>> >> >>> > as >>>> >> >>> > auto is like null plus more (json, script, future accepted >>>> >> dataTypes). >>>> >> >>> > The whole point is that "auto" means auto-detect type via >>>> >> content-type >>>> >> >>> > headers and null does not mean that (it means guess between >>>> html >>>> or >>>> >> >>> > xml) >>>> >> >>> >>>> >> >>> This is exactly where the solution is inconsistent. >>>> >> >>> >>>> >> >>> "auto", in your implementation, does not mean "null plus more >>>> (json, >>>> >> >>> script, >>>> >> >>> *future accepted dataTypes*)" but it just means "null plus json & >>>> >> >>> script" >>>> >> >>> and only that. Following your idea that a library has to keep >>>> exactly >>>> >> >>> the >>>> >> >>> same behavior from versions to versions (which jQuery broke btw >>>> when >>>> >> >>> ditching the @ syntax for attributes in selectors) then what >>>> happens >>>> >> >>> if >>>> >> >>> & >>>> >> >>> when jQuery introduces a new auto-detectable dataType in 1.4.1? >>>> You >>>> >> >>> create >>>> >> >>> an "auto2" dataType so that existing code running in 1.4 is >>>> >> >>> unaffected >>>> >> >>> (ie: >>>> >> >>> the new dataType is not auto-detected)? How would you document >>>> such >>>> a >>>> >> >>> behaviour? What happens when there's another auto-detectable >>>> dataType >>>> >> >>> introduced in 1.4.2? >>>> >> >>> >>>> >> >>> Giving programmers a way to specify exactly the dataTypes they >>>> expect >>>> >> to >>>> >> >>> be >>>> >> >>> auto-detected is the way to go (would it be with an array or an >>>> >> >>> expression). >>>> >> >>> Just add a s.dataType = s.dataType || [text,xml] in the ajax code >>>> and >>>> >> >>> you're >>>> >> >>> done: no backward compatibility issue... plus you're safe for >>>> future >>>> >> >>> developments in the dataType auto-detection area. >>>> >> >>> >>>> >> >>> 2009/12/27 webbiedave <webbied...@websiteguard.com> >>>> >> >>> >>>> >> >>> > "Second, auto seems like the weirdest thing ever to me used >>>> like >>>> it >>>> >> is >>>> >> >>> > here. So dataType==null and dataType=="auto" act the same for >>>> xml >>>> >> >>> > but >>>> >> >>> > not for script & json? Seems completely inconsistant to me." >>>> >> >>> >>>> >> >>> > It's not that weird. I don't think that different settings >>>> yielding >>>> >> >>> > different results is necessarily inconsistent. There are two >>>> ways >>>> >> >>> > to >>>> >> >>> > get xml and now there'll be a third. As I mentioned in my >>>> previous >>>> >> >>> > post, one of this approach's downside is "null vs auto" >>>> confusion >>>> >> >>> > as >>>> >> >>> > auto is like null plus more (json, script, future accepted >>>> >> dataTypes). >>>> >> >>> > The whole point is that "auto" means auto-detect type via >>>> >> content-type >>>> >> >>> > headers and null does not mean that (it means guess between >>>> html >>>> or >>>> >> >>> > xml). It is imperative that the behavior of dataType: null >>>> remains >>>> >> the >>>> >> >>> > same so this is a way to do that while affording multiple >>>> expected >>>> >> >>> > dataTypes in a way that's secure, doesn't bloat and doesn't >>>> break >>>> >> >>> > existing apps. Quite frankly, it usage makes simple sense to me >>>> and >>>> >> >>> > those who need it will know exactly what it means and how to >>>> use >>>> it >>>> >> >>> > (and will be relieved they can ditch their hacked libraries). >>>> >> >>> >>>> >> >>> > "If a coder does not want auto conversion, then he simply >>>> specifies >>>> >> >>> > a >>>> >> >>> > dataType (namely "text")." >>>> >> >>> >>>> >> >>> > But null does not mean auto convert. It means guess between >>>> html >>>> or >>>> >> >>> > xml and that cannot change. >>>> >> >>> >>>> >> >>> > "But, please, do not introduce a behavior that will act >>>> differently >>>> >> >>> > for xml than it does for any other dataType deduced from >>>> content >>>> >> >>> > type >>>> >> >>> > headers." >>>> >> >>> >>>> >> >>> > I admit I don't share your fear of such behavior and, in fact, >>>> >> greatly >>>> >> >>> > desire such a new setting. I'll know that my live apps that are >>>> >> >>> > using >>>> >> >>> > dataType: null will be unaffected and in the future I'd be able >>>> to >>>> >> >>> > write ajax calls that can respond to various data types. Also, >>>> I've >>>> >> >>> > suggested several approaches and look forward to reading what >>>> >> >>> > others >>>> >> >>> > think of them. >>>> >> >>> >>>> >> >>> > On Dec 26, 3:47 pm, Julian Aubourg <aubourg.jul...@gmail.com> >>>> >> >>> > wrote: >>>> >> >>> > > Regardless, I'm leaning towards the dataType: "auto" approach >>>> as >>>> >> >>> > > it's easy to use/implement and affords enough control. >>>> >> >>> >>>> >> >>> > > Well, so, first, I translated the dataType to "auto" when it >>>> was >>>> >> >>> > > null/undefined in my rewriting (because I hate >>>> messy/undefined >>>> >> >>> > > values). >>>> >> >>> > But >>>> >> >>> > > that's no biggy. >>>> >> >>> >>>> >> >>> > > Second, auto seems like the weirdest thing ever to me used >>>> like >>>> >> >>> > > it >>>> >> >>> > > is >>>> >> >>> > here. >>>> >> >>> > > So dataType==null and dataType=="auto" act the same for xml >>>> but >>>> >> >>> > > not >>>> >> >>> > > for >>>> >> >>> > > script & json? Seems completely inconsistant to me. >>>> >> >>> >>>> >> >>> > > If a coder does not want auto conversion, then he simply >>>> >> >>> > > specifies >>>> >> a >>>> >> >>> > > dataType (namely "text"). You just have to document it. But, >>>> >> please, >>>> >> >>> > > do >>>> >> >>> > not >>>> >> >>> > > introduce a behavior that will act differentely for xml than >>>> it >>>> >> does >>>> >> >>> > > for >>>> >> >>> > any >>>> >> >>> > > other dataType deduced from content type headers. >>>> >> >>> >>>> >> >>> > > 2009/12/26 webbiedave <webbied...@websiteguard.com> >>>> >> >>> >>>> >> >>> > > > I was referring solely to the "bitwise or" style. >>>> Regardless, >>>> >> >>> > > > I'm >>>> >> >>> > > > leaning towards the dataType: "auto" approach as it's easy >>>> to >>>> >> use/ >>>> >> >>> > > > implement and affords enough control. >>>> >> >>> >>>> >> >>> > > > Julian Aubourg wrote: >>>> >> >>> >>>> >> >>> > > > > As for string expressions not being in the calling style >>>> of >>>> >> >>> > > > > jQuery... >>>> >> >>> > > > > well... I really disagree here, since jQuery has >>>> expression >>>> >> >>> > > > > parsed >>>> >> >>> > parsed >>>> >> >>> > > > > pretty much everywhere ;) >>>> >> >>> >>>> >> >>> > > > -- >>>> >> >>> >>>> >> >>> > > > 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%2bunsubscr...@googlegroups.com<jquery-dev%252bunsubscr...@googlegroups.com> >>>> <jquery-dev%252bunsubscr...@googlegroups.com<jquery-dev%25252bunsubscr...@googlegroups.com> >>>> > >>>> >> >>>> <jquery-dev%252bunsubscr...@googlegroups.com<jquery-dev%25252bunsubscr...@googlegroups.com> >>>> <jquery-dev%25252bunsubscr...@googlegroups.com<jquery-dev%2525252bunsubscr...@googlegroups.com> >>>> > >>>> >> > >>>> >> >>> >>>> >> >>> > > > . >>>> >> >>> > > > For more options, visit this group at >>>> >> >>> > > >http://groups.google.com/group/jquery-dev?hl=en. >>>> >> >>> >>>> >> >>> > -- >>>> >> >>> >>>> >> >>> > You received this message because you are subscribed to the >>>> Google >>>> >> >>> > Groups >>>> >> >>> > "jQuery Development" group. >>>> >> >>> > To post to this group, send email to >>>> jquery-...@googlegroups.com. >>>> >> >>> > To unsubscribe from this group, send email to >>>> >> >>> > >>>> >> >>>> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com> >>>> <jquery-dev%2bunsubscr...@googlegroups.com<jquery-dev%252bunsubscr...@googlegroups.com> >>>> > >>>> >> >>>> <jquery-dev%2bunsubscr...@googlegroups.com<jquery-dev%252bunsubscr...@googlegroups.com> >>>> <jquery-dev%252bunsubscr...@googlegroups.com<jquery-dev%25252bunsubscr...@googlegroups.com> >>>> > >>>> >> > >>>> >> >>> > . >>>> >> >>> > For more options, visit this group at >>>> >> >>> >http://groups.google.com/group/jquery-dev?hl=en. >>>> >> >> >>>> >> >> -- >>>> >> >> >>>> >> >> You received this message because you are subscribed to the Google >>>> >> Groups >>>> >> >> "jQuery Development" group. >>>> >> >> To post to this group, send email to jquery-...@googlegroups.com. >>>> >> >> To unsubscribe from this group, send email to >>>> >> >> >>>> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com> >>>> <jquery-dev%2bunsubscr...@googlegroups.com<jquery-dev%252bunsubscr...@googlegroups.com> >>>> > >>>> >> . >>>> >> >> For more options, visit this group at >>>> >> >> http://groups.google.com/group/jquery-dev?hl=en. >>>> >> >> >>>> >> >> >>>> >> >> >>>> >> > >>>> >> > -- >>>> >> > >>>> >> > You received this message because you are subscribed to the Google >>>> >> > Groups >>>> >> > "jQuery Development" group. >>>> >> > To post to this group, send email to jquery-...@googlegroups.com. >>>> >> > To unsubscribe from this group, send email to >>>> >> > >>>> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com> >>>> <jquery-dev%2bunsubscr...@googlegroups.com<jquery-dev%252bunsubscr...@googlegroups.com> >>>> > >>>> >> . >>>> >> > For more options, visit this group at >>>> >> > http://groups.google.com/group/jquery-dev?hl=en. >>>> >> >>>> >> -- >>>> >> >>>> >> You received this message because you are subscribed to the Google >>>> Groups >>>> >> "jQuery Development" group. >>>> >> To post to this group, send email to jquery-...@googlegroups.com. >>>> >> To unsubscribe from this group, send email to >>>> >> >>>> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com> >>>> <jquery-dev%2bunsubscr...@googlegroups.com<jquery-dev%252bunsubscr...@googlegroups.com> >>>> > >>>> >> . >>>> >> For more options, visit this group at >>>> >> http://groups.google.com/group/jquery-dev?hl=en. >>>> >> >>>> >> >>>> >> >>>> > >>>> > -- >>>> > >>>> > You received this message because you are subscribed to the Google >>>> Groups >>>> > "jQuery Development" group. >>>> > To post to this group, send email to jquery-...@googlegroups.com. >>>> > To unsubscribe from this group, send email to >>>> > jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com> >>>> . >>>> > For more options, visit this group at >>>> > http://groups.google.com/group/jquery-dev?hl=en. >>>> >>>> -- >>>> >>>> You received this message because you are subscribed to the Google >>>> Groups "jQuery Development" group. >>>> To post to this group, send email to jquery-...@googlegroups.com. >>>> To unsubscribe from this group, send email to >>>> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com> >>>> . >>>> For more options, visit this group at >>>> http://groups.google.com/group/jquery-dev?hl=en. >>>> >>>> >>>> >>> -- >>> You received this message because you are subscribed to the Google Groups >>> "jQuery Development" group. >>> To post to this group, send email to jquery-...@googlegroups.com. >>> To unsubscribe from this group, send email to >>> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com> >>> . >>> For more options, visit this group at >>> http://groups.google.com/group/jquery-dev?hl=en. >>> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "jQuery Development" group. >> To post to this group, send email to jquery-...@googlegroups.com. >> To unsubscribe from this group, send email to >> jquery-dev+unsubscr...@googlegroups.com<jquery-dev%2bunsubscr...@googlegroups.com> >> . >> For more options, visit this group at >> http://groups.google.com/group/jquery-dev?hl=en. >> > > -- You received this message because you are subscribed to the Google Groups "jQuery Development" group. To post to this group, send email to jquery-...@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.