Pergunta

Isso é um pouco discurso, mas também uma pergunta muito serosa. O jQuery mudou a serialização do param do Ajax da seguinte forma:

O jQuery 1.4 adiciona suporte para a serialização de parâmetros aninhados no jQuery.param, usando a abordagem popularizada pelo PHP e suportada pelo Ruby on Rails. Por exemplo, {foo: ["bar", "baz"]} será serializado como "foo [] = bar & foo [] = baz".

Você pegou isso?

Você chama seu parâmetro foo. jQuery agora renomeia isso para foo[] Atrás das suas costas, se o valor de Foo for uma matriz. A razão para isso é porque alguns PHP-ERs e Rubyists esperam que as APIs de terceiros renomeem as coisas para eles.

Me chame de antiquado, mas quando eu coloco algo em um mapa, com chave x, Espero encontrar o valor em x. Ou pelo menos tenha esse comportamento padrão com uma substituição opcional.

Até a documentação concorda comigo:

Se o valor for uma matriz, o jQuery serializa vários valores com a mesma tecla IE {foo: ["bar1", "bar2"]} se torna '& foo = bar1 & foo = bar2'.

Estou certo ao pensar que este é simplesmente um julgamento ruim da equipe do jQuery?

Foi útil?

Solução

Na verdade está preenchendo uma grande inconsistência, E se Seu Deserializer está ciente da convenção e trabalha com ela bem. Isso faz com que uma variedade de coisas pareça diferente de uma coisa que é própria.

Velho:

  • foo: "bar" mapeia para "foo=bar" mapeia para foo: "bar".
  • foo: ["bar"] mapeia para "foo=bar" mapeia para foo: "bar".
  • foo: ["bar", "baz"] mapeia para "foo=bar&foo=baz" mapeia para foo: ["bar", "baz"].

Novo:

  • foo: "bar" mapeia para "foo=bar" mapeia para foo: "bar".
  • foo: ["bar"] mapeia para "foo[]=bar" mapeia para foo: ["bar"].
  • foo: ["bar", "baz"] mapeia para "foo[]=bar&foo[]=baz" mapeia para foo: ["bar", "baz"].

E agora tudo de volta bem e você não precisa se preocupar em receber dados da matriz ou dados que não sejam de marca, dependendo de quantos elementos estavam na matriz para começar. Para elegância máxima, foo: [] também deve serializar para foo[] (Uma chave sem valor), indicando uma lista de 0-ara, mas o jQuery 1.4 não faz isso. Talvez deva. :)

Outras dicas

Discordo. A convenção antiga funcionou muito bem e continua funcionando bem para cavalos de trabalho da web clássicos como o Perl's CGI.pm. Eu acho que o JQuery está apenas mudando uma convenção de trabalho para outra, e não sei que alguém de ambos os lados será tão feliz.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top