OK. Not sure where we're at on this but I'm hoping some sort of consensus
can be achieved. Here are the  approaches being bandied about to allow
auto-detect of json (and perhaps other dataTypes):


1) Allow $.ajax() to accept multiple expected data types, i.e., dataTypes:
['json', 'html']. jQuery will attempt to auto-detect only those types.

2) New setting/option to have $.ajax() auto-detect/translate via response
content-type. This will detect/translate any of the supported data types
(and future data types) via the response Content-Type header.

3) Change dataType:null's auto-detect (intelligent guess) to include json.

4) New setting/option to have $.ajax() auto-detect html, xml and json.


Be so kind as to re-vote in case these added details have changed your
minds.





On Tue, 29 Dec 2009 09:46:50 -0500, "Rick Waldron" <waldron.r...@gmail.com>
wrote:
> 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.
-- 
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.


Reply via email to