Jump to content
XicoXperto

[jQuery]Esperar pelo Ajax

Recommended Posts

taviroquai

Não sei se venho tarde mas não seria mais fácil algo do género... encadear chamadas ajax...

function addFormPerson(bla) {
   $.post(url, $("form").serialize(),
       function(data) { addContact(data) }
   );
}

function addContact(bla) {
   $.post(url, bla, function(data) { eAssimSucessivamente(data); });
}

function eAssimSucessivamente(bla) { //... }

Ou ainda organizar estas funções numa classe...

Que tal?

Share this post


Link to post
Share on other sites
XicoXperto

:confused: não entendi.

Encadear como?

pois pelo que apresentas, eu tenho isso assim, cada função com um post especifico (não sei se é isto que estas a falar)

Share this post


Link to post
Share on other sites
brunoais

escreves o código que queres que execute quando o post acaba na função de callback para o método post().


"[Os jovens da actual geração]não lêem porque não envolve um telecomando que dê para mirar e atirar, não falam porque a trapalhice é rainha e o calão é rei" autor: thoga31

Life is a genetically transmitted disease, induced by sex, with death rate of 100%.

Share this post


Link to post
Share on other sites
XicoXperto

Já entendi, no entanto, eu tenho as funções já com o que vão executar no callback, e cada uma tem o seu...

Não sei se é a forma correcta, mas eu faço apenas o call do form e seus elementos, e depois é no callback do post() que faço a configuração do jqTransform, TipTip, datepickers, os butões de cada elemento, daí a já ter os callbacks para cada bloco de informação usados... Por isso é que pretendia uma forma de poder executá-los sem ter de refazer o código todo. Mais uma vez, não sei se é o mais correcto.

Share this post


Link to post
Share on other sites
XicoXperto

O $.ajax tem mais dinâmica para o que queres alcançar que o $.post

Hmm, estive a estudar acerca do $.ajax() e realmente tem muito mais possibilidades que o $.post(), no entanto ambos devolvem o tal deferred object.

A não ser que a ideia seja fazer uma função especifica para este caso, não estou a ver em que me pode facilitar. Pois a ideia que eu tinha era de re-aproveitar código.

E acabei de descobrir que a minha ideia afinal não está a funcionar.

function selfCallerWithWaitOnReady ( func , total ) {
 // test if its over or not
 if ( total == 0 ) return true;
 // execute first and wait to execute next
return $.when.apply( func( total ) ).done ( function () {
			selfCallerWithWaitOnReady ( func , total-1 );
 });
} // selfCallerWithWaitOnReady ( func , total )

A função está a devolver logo quando o primeiro "func ( total )" está a ser executado e não o ultimo, então estou com problemas.

Malta, vou por aqui o que me está a acontecer em imagens.

ajaxv.jpg

Podem testar isto em: http://ba.dotslashsource.com/

1 - abrir o form pessoa

2 - abrir 4 elementos de cada tipo excepto pensoes ( clicar em adicionar ira preencher o formulario )

3 - clicar em editar ( ira criar um novo formulario, mantendo o antigo como backup )

4 - Como se pode ver no 4 só alguns dados são copiados, pois tenta copiar ainda antes de o ajax ter terminado

Se quiserem dar uma vista de olhos ao ficheiro "form.person.js" vai dar para entender o porque de eu querer re-aproveitar o código.

Malta, obrigado pela ajuda!

Share this post


Link to post
Share on other sites
taviroquai

Estive a testar...

No passo 2, quando fiz adicionar, não enviou os dados para o servidor... pelo menos nao vi dados no post pelo firebug... talvez estejas a enviar de outra forma...

No passo 3, vais ler todos os dados ao server não é? Para isto, basta 1 chamada em ajax (se carregares JSON, tens que "limpar" os formularios no lado do cliente). Não percebo porque precisas "copiar os dados"...

Share this post


Link to post
Share on other sites
XicoXperto

mas não envio nada para o servidor nestes passos, apenas quando vou inserir a familia completa (é onde estou a trabalhar agora)

Deveria inserir 1 a 1, isto é sempre que adicionar um elemento à familia devo inserir?

A minha ideia era deixar o utilizador editar os dados à vontade e só no fim manda-los para o servidor, mas como é a primeira vez que estou a trabalhar com javascript não sei se é a maneira mais correcta de o fazer.

O que eu peço ao servidor é o layout para os formulários ( são feitos em php, e depois completos pelo javascript / jQuery ) .

Share this post


Link to post
Share on other sites
taviroquai

Deveria inserir 1 a 1, isto é sempre que adicionar um elemento à familia devo inserir?

A minha ideia era deixar o utilizador editar os dados à vontade e só no fim manda-los para o servidor, mas como é a primeira vez que estou a trabalhar com javascript não sei se é a maneira mais correcta de o fazer.

Penso que seja pouco seguro... quanto mais rápido guardares os dados no servidor melhor, mesmo que sejam marcados na base de dados (ou melhor, na sessão) como rascunho (exemplo: o gmail está sempre a guardar os rascunhos enquanto o utilizador vai escrevendo o mail para o caso de se perder os dados no lado do cliente).

Edited by taviroquai

Share this post


Link to post
Share on other sites
XicoXperto

Penso que seja pouco seguro... quanto mais rápido guardares os dados no servidor melhor, mesmo que sejam marcados na base de dados como rascunho (exemplo: o gmail está sempre a guardar os rascunhos enquanto o utilizador vai escrevendo o mail para o caso de se perder os dados no lado do cliente).

Realmente é uma ideia, nem tinha pensado nisso... :/

Então terei que mudar isto...

Vou então mudar isto de maneira a que sempre que adicione, ele seja directamente inserido (isto já está, o que falta é fazer o script para edição sendo que a minha ideia não dava...)

Share this post


Link to post
Share on other sites
taviroquai

O que eu peço ao servidor é o layout para os formulários ( são feitos em php, e depois completos pelo javascript / jQuery ) .

Ah! Agora entendo porque tinhas que "copiar os formulários" heheh

No passo 3, já que pedes os formulários, podes fazer mais 1 pedido e pedir os dados para preencher os fomularios e já não precisas de "copiar os formularios" no lado do cliente... mas isso é bastante trabalhoso deixar isso no javascript... por isso normalmente o php devolve logo os dados nos forms...

Edited by taviroquai

Share this post


Link to post
Share on other sites
XicoXperto

Ah! Agora entendo porque tinhas que "copiar os formulários" heheh

No passo 3, já que pedes os formulários, podes fazer mais 1 pedido e pedir os dados para preencher os fomularios e já não precisas de "copiar os formularios" no lado do cliente...

Pois, realmente tive problemas desde o inicio a tentar explicar isso.

obrigado pela ajuda, quando tiver terminado digo qualquer coisa.

Share this post


Link to post
Share on other sites
taviroquai

É um exercício trabalhoso fazer esse workflow todo em javascript... por isso existem frameworks (ExtJS ou Dojo) que facilitam bastante e reduzem significativamente a quantidade de código a escrever em javascript.

Share this post


Link to post
Share on other sites
XicoXperto

acredito vivamente que sim, mas isto é para o projecto de final de curso, e as unicas coisas que demos por alto acerca de web developing foi html/css, e um pouco de php...

Então tentei arranjar algo que fosse mais dinamico que o php, mas o tempo não é muito... :(

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.