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.


Reply via email to