This is good. #2 has solid support. John, care to chime in this?
-- Sent from my Palm Prē Julian Aubourg wrote: 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> >> > >> >>> >> >>> > > > . >> >>> > > > 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. > 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. -- 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. -- 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. -- 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. -- 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.