link_to_remote

0 views
Skip to first unread message

AlphaX

unread,
Oct 1, 2008, 7:42:33 AM10/1/08
to symfony-pt
Olá,

Gostaria de saber se é possível utilizar a função link_to_remote para
executar uma função do action e após isso preencher 3 campos do
formulário na mesma pagina com os valores que retornar da operação,
sem dar refresh.

Aguardo respostas.

Raphael

unread,
Oct 1, 2008, 8:08:00 AM10/1/08
to symfo...@googlegroups.com
Sim, é possível.

O mais recomendável para isso é utilizar JSON ou XML.
Vocé deve saber que toda requisição AJAX quando retornada com sucesso você pode retornar um String. Com isso vc pode converter em um objeto XML ou JSON. O mais fácil é o JSON. No site prototypejs.org vc vai encontrar mais detalhes de JSON. Na documentação oficial vc também terá mais detalhes: http://www.symfony-project.org/book/1_1/11-Ajax-Integration#JSON

2008/10/1 AlphaX <guil...@brisanet.com.br>



--
Raphael Almeida Araújo
Homepage: http://sites.google.com/site/raphoxaraujo

AlphaX

unread,
Oct 1, 2008, 8:12:46 AM10/1/08
to symfony-pt
Se não for pedir muito poderia me mostrar um exemplo simples?

On 1 out, 09:08, Raphael <raphox.ara...@gmail.com> wrote:
> Sim, é possível.
>
> O mais recomendável para isso é utilizar JSON ou XML.
> Vocé deve saber que toda requisição AJAX quando retornada com sucesso você
> pode retornar um String. Com isso vc pode converter em um objeto XML ou
> JSON. O mais fácil é o JSON. No site prototypejs.org vc vai encontrar mais
> detalhes de JSON. Na documentação oficial vc também terá mais detalhes:http://www.symfony-project.org/book/1_1/11-Ajax-Integration#JSON
>
> 2008/10/1 AlphaX <guilhe...@brisanet.com.br>

Raphael

unread,
Oct 1, 2008, 9:21:25 AM10/1/08
to symfo...@googlegroups.com
então cara. como eu disse no site do symfony no link q te mandei tem o que vc precisa.

O exemplo de lá é:
na sua view vc utiliza:
<?php echo link_to_remote('Refresh the letter', array(
'url' => 'publishing/refresh',
'complete' => 'updateJSON(ajax)'
)) ?>
 
<?php echo javascript_tag("
function updateJSON(ajax)
{
json = ajax.responseJSON;
for (var i = 0; i < json.length; i++)
{
Element.update(json[i][0], json[i][1]);
}
}
"
) ?>

no seu controller vc deve gerar algo do tipo:
$this->getResponse()->setHttpHeader('Content-Type','application/json; charset=utf-8');
$output = '[["title", "My basic letter"], ["name", "Mr Brown"]]';
return $this->renderText('('.$output.')');

e "voalá"!!

vc vai inserir nos elementos html de id igual a title e name os valores my basi... e mr brown.

2008/10/1 AlphaX <guil...@brisanet.com.br>

AlphaX

unread,
Oct 1, 2008, 10:19:24 AM10/1/08
to symfony-pt
Fiz da forma como me falou

Mas não retorna erro e nem adiciona os valores nos campos input
type=text

o que pode ser?

Obs.: informei os ID dos campos

On 1 out, 10:21, Raphael <raphox.ara...@gmail.com> wrote:
> então cara. como eu disse no site do symfony no link q te mandei tem o que
> vc precisa.
>
> O exemplo de lá é:
> na sua view vc utiliza:
>
> <?php echo link_to_remote('Refresh the letter', array(
>   'url'      => 'publishing/refresh',
>   'complete' => 'updateJSON(ajax)'
> )) ?>
>
> <?php echo javascript_tag("
> function updateJSON(ajax)
> {
>   json = ajax.responseJSON;
>   for (var i = 0; i < json.length; i++)
>   {
>      Element.update(json[i][0], json[i][1]);
>   }}
>
> ") ?>
>
> no seu controller vc deve gerar algo do tipo:
>
> $this->getResponse()->setHttpHeader('Content-Type','application/json;
> charset=utf-8');
>     $output = '[["title", "My basic letter"], ["name", "Mr Brown"]]';
>     return $this->renderText('('.$output.')');
>
> e "voalá"!!
>
> vc vai inserir nos elementos html de id igual a title e name os valores my
> basi... e mr brown.
>
> 2008/10/1 AlphaX <guilhe...@brisanet.com.br>

Raphael

unread,
Oct 1, 2008, 10:23:34 AM10/1/08
to symfo...@googlegroups.com
talvez seja erro de JS.

vc deve estar tentado algo do tipo:


Element.update(json[i][0], json[i][1]);

mas sendo um input vc deve utilizar algo do tipo:

$(json[i][0]).value = json[i][1];

2008/10/1 AlphaX <guil...@brisanet.com.br>

AlphaX

unread,
Oct 1, 2008, 10:35:44 AM10/1/08
to symfony-pt
Cara não esta dando certo não... coloquei ate assim pra ver:

$('id_do_campo').value = 'sdfsdf';


On 1 out, 11:23, Raphael <raphox.ara...@gmail.com> wrote:
> talvez seja erro de JS.
>
> vc deve estar tentado algo do tipo:
>
> Element.update(json[i][0], json[i][1]);
>
> mas sendo um input vc deve utilizar algo do tipo:
>
> $(json[i][0]).value = json[i][1];
>
> 2008/10/1 AlphaX <guilhe...@brisanet.com.br>

Raphael

unread,
Oct 1, 2008, 10:41:45 AM10/1/08
to symfo...@googlegroups.com
existe a chamado do prototype na sua pagina?
se nao, vc vai ter que chamar algo do tipo: userHelper('JavaScript');
não lembro muito bem. ai vc vai ter que olhar na documentação.

mas no caso de se utilizar a funcao link_to_remote deveria carregar o prototype automaticamente.

se estiver chamando. vc vai ter que utilizar o firebug pra ver qual o erro realment.

pode ser q o elemento nao tenha o id que vc esta achando q ele tenha tambem.
ai so o firebug vai responder.

2008/10/1 AlphaX <guil...@brisanet.com.br>

AlphaX

unread,
Oct 1, 2008, 10:44:32 AM10/1/08
to symfony-pt
Cara o estranho é que o prototype ta ok e no firebug não apresenta
nenhum erro -.-

On 1 out, 11:41, Raphael <raphox.ara...@gmail.com> wrote:
> existe a chamado do prototype na sua pagina?
> se nao, vc vai ter que chamar algo do tipo: userHelper('JavaScript');
> não lembro muito bem. ai vc vai ter que olhar na documentação.
>
> mas no caso de se utilizar a funcao link_to_remote deveria carregar o
> prototype automaticamente.
>
> se estiver chamando. vc vai ter que utilizar o firebug pra ver qual o erro
> realment.
>
> pode ser q o elemento nao tenha o id que vc esta achando q ele tenha tambem.
> ai so o firebug vai responder.
>
> 2008/10/1 AlphaX <guilhe...@brisanet.com.br>

Raphael

unread,
Oct 1, 2008, 10:45:40 AM10/1/08
to symfo...@googlegroups.com
é bem provavel que o elemento de id q vc esta acessando não existe ou repita em algum lugar.

2008/10/1 AlphaX <guil...@brisanet.com.br>

AlphaX

unread,
Oct 1, 2008, 10:52:43 AM10/1/08
to symfony-pt
Tbm não...

Eu coloquei dentro da função assim:

alert('teste');

E nem isso foi executado..

Coloquei também um loading

e percebi que quando é pra rodar a função para tudo...

On 1 out, 11:45, Raphael <raphox.ara...@gmail.com> wrote:
> é bem provavel que o elemento de id q vc esta acessando não existe ou repita
> em algum lugar.
>
> 2008/10/1 AlphaX <guilhe...@brisanet.com.br>

Raphael

unread,
Oct 1, 2008, 11:07:45 AM10/1/08
to symfo...@googlegroups.com
o problema deve estar nesse ".responseJSON"

tenta utilizar ".responseText"

algo do tipo:

var resultado = request.responseText; // talves funcione request.responseText.evalJSON();
resultado = resultado.evalJSON();

ai vc vai ter um objeto.


---
Não me lembro muito bem. mas acho que ja tvie problema com esse .responseJSON

2008/10/1 AlphaX <guil...@brisanet.com.br>

AlphaX

unread,
Oct 1, 2008, 11:10:44 AM10/1/08
to symfony-pt
Rapaz troquei de updateJSON(ajax) para updateJSON(request, json) pelo
menos o alert já ta dando

On 1 out, 12:07, Raphael <raphox.ara...@gmail.com> wrote:
> o problema deve estar nesse ".responseJSON"
>
> tenta utilizar ".responseText"
>
> algo do tipo:
>
> var resultado = request.responseText; // talves funcione
> request.responseText.evalJSON();
> resultado = resultado.evalJSON();
>
> ai vc vai ter um objeto.
>
> ---
> Não me lembro muito bem. mas acho que ja tvie problema com esse
> .responseJSON
>
> 2008/10/1 AlphaX <guilhe...@brisanet.com.br>

Raphael

unread,
Oct 1, 2008, 11:12:43 AM10/1/08
to symfo...@googlegroups.com
ia postar agora. acho que não existe esse responseJSON.
Segundo a documentação oficial do prototype é assim mesmo.

http://www.prototypejs.org/learn/introduction-to-ajax

Evaluating a JavaScript response

Sometimes the application is designed to send JavaScript code as a response. If the content type of the response matches the MIME type of JavaScript then this is true and Prototype will automatically eval() returned code. You don't need to handle the response explicitly if you don't need to.

Alternatively, if the response holds a X-JSON header, its content will be parsed, saved as an object and sent to the callbacks as the second argument:


new Ajax.Request('/some_url', { method:'get',
onSuccess: function(transport, json){
alert(json ? Object.inspect(json) : "no JSON object");
}
});

Use this functionality when you want to fetch non-trivial data with Ajax but want to avoid the overhead of parsing XML responses. JSON is much faster (and lighter) than XML.



2008/10/1 AlphaX <guil...@brisanet.com.br>

AlphaX

unread,
Oct 1, 2008, 11:20:55 AM10/1/08
to symfony-pt
Olha como esta aqui:

function updateJSON(request, json)
{
alert(request)

jsonx = request.responseText;

alert(jsonx);

for (var i = 0; i < jsonx.length; i++)
{
alert(jsonx[i][0]);
$(jsonx[i][0]).value = jsonx[i][1];
}
}

Ate o alert(jsonx); funciona blz... Ele me retorna o seguinte:

{"base_clientes_nome":"AIRTON JOSE RUBIN DE
BORTOLI","base_clientes_data_nascimento":"15\/05\/1955"}

O que falta agora?

On 1 out, 12:12, Raphael <raphox.ara...@gmail.com> wrote:
> ia postar agora. acho que não existe esse responseJSON.
> Segundo a documentação oficial do prototype é assim mesmo.
>
> http://www.prototypejs.org/learn/introduction-to-ajax
> Evaluating a JavaScript response
>
> Sometimes the application is designed to send JavaScript code as a response.
> If the content type of the response matches the MIME type of JavaScript then
> this is true and Prototype will automatically eval() returned code. You
> don't need to handle the response explicitly if you don't need to.
>
> Alternatively, if the response holds a X-JSON header, its content will be
> parsed, saved as an object and sent to the callbacks as the second argument:
>
> new Ajax.Request('/some_url', { method:'get',
>   onSuccess: function(transport, json){
>       alert(json ? Object.inspect(json) : "no JSON object");
>     }
>   });
>
> Use this functionality when you want to fetch non-trivial data with Ajax but
> want to avoid the overhead of parsing XML responses. JSON is much faster
> (and lighter) than XML.
>
> 2008/10/1 AlphaX <guilhe...@brisanet.com.br>

Raphael

unread,
Oct 1, 2008, 11:27:21 AM10/1/08
to symfo...@googlegroups.com
então. vc nao esta gerando o objeto json

vc esta fazendo assim:

jsonx = request.responseText;
alert(jsonx);
for (var i = 0; i < jsonx.length; i++)...

algo do tipo:
var resultado = request.responseText; // talvez funcione request.responseText.evalJSON();
resultado = resultado.evalJSON();

2008/10/1 AlphaX <guil...@brisanet.com.br>

AlphaX

unread,
Oct 1, 2008, 11:32:08 AM10/1/08
to symfony-pt
function updateJSON(request, json)
{
alert(request);

var jsonx = request.responseText;
jsonx = jsonx.evalJSON();

alert(jsonx);

for (var i = 0; i < jsonx.length; i++)
{
alert(jsonx[i][0]);
}
}

Nos 2 alert retorna

[object Object]

Raphael

unread,
Oct 1, 2008, 11:34:01 AM10/1/08
to symfo...@googlegroups.com
isso mesmo. realmente tem q ser um objeto.

agora tem q saber qual o formato que esta esse objeto. ele pode ser acessado com vetor ou via atributos.

dá uma olhada aqui http://prototypejs.org/learn/json para saber mais sobre este objeto.

2008/10/1 AlphaX <guil...@brisanet.com.br>

AlphaX

unread,
Oct 1, 2008, 11:50:32 AM10/1/08
to symfony-pt
function updateJSON(request, json)
{
alert(request);

var jsonx = request.responseText.evalJSON();

alert(jsonx);

for (var i = 0; i < jsonx.length; i++)
{
alert(jsonx[i][0]);
}
}

quando chega nessa parte para tudo:

for (var i = 0; i < jsonx.length; i++)

=/

On 1 out, 12:34, Raphael <raphox.ara...@gmail.com> wrote:
> isso mesmo. realmente tem q ser um objeto.
>
> agora tem q saber qual o formato que esta esse objeto. ele pode ser acessado
> com vetor ou via atributos.
>
> dá uma olhada aquihttp://prototypejs.org/learn/jsonpara saber mais sobre
> este objeto.
>
> 2008/10/1 AlphaX <guilhe...@brisanet.com.br>
> ...
>
> mais »

Raphael

unread,
Oct 1, 2008, 11:55:22 AM10/1/08
to symfo...@googlegroups.com
cara. vc vai ter saber qual o formato do seu JSON. dar uma varrida na documentacao do protoype e saber como vc vai acessar os atributos do seu objeto.

2008/10/1 AlphaX <guil...@brisanet.com.br>



--
Raphael Almeida Araújo
Homepage: http://sites.google.com/site/raphoxaraujo

AlphaX

unread,
Oct 1, 2008, 12:40:12 PM10/1/08
to symfony-pt
Rapaz, assim foi:

function consultarCPF(request, json)
{
var jsonx = request.responseText.evalJSON();

$('base_clientes_nome').value = jsonx.base_clientes_nome;
$('base_clientes_data_nascimento').value =
jsonx.base_clientes_data_nascimento;
}

So que preciso que seja com um for()

On 1 out, 12:55, Raphael <raphox.ara...@gmail.com> wrote:
> cara. vc vai ter saber qual o formato do seu JSON. dar uma varrida na
> documentacao do protoype e saber como vc vai acessar os atributos do seu
> objeto.
>
> 2008/10/1 AlphaX <guilhe...@brisanet.com.br>
>
>
>
> >                function updateJSON(request, json)
> >                {
> >                        alert(request);
>
> >                         var jsonx = request.responseText.evalJSON();
>
> >                        alert(jsonx);
>
> >                        for (var i = 0; i < jsonx.length; i++)
> >                        {
> >                                alert(jsonx[i][0]);
> >                        }
> >                }
>
> > quando chega nessa parte para tudo:
>
> > for (var i = 0; i < jsonx.length; i++)
>
> > =/
>
> > On 1 out, 12:34, Raphael <raphox.ara...@gmail.com> wrote:
> > > isso mesmo. realmente tem q ser um objeto.
>
> > > agora tem q saber qual o formato que esta esse objeto. ele pode ser
> > acessado
> > > com vetor ou via atributos.
>
> > > dá uma olhada aquihttp://prototypejs.org/learn/jsonparasaber mais sobre
> ...
>
> mais »

AlphaX

unread,
Oct 1, 2008, 12:47:13 PM10/1/08
to symfony-pt
So pra finalizar... alterei a estrutura o json e agora deu certo com o
for()

Desculpa o incomodo... obg
> > > > dá uma olhada aquihttp://prototypejs.org/learn/jsonparasabermais sobre
> ...
>
> mais »

Raphael

unread,
Oct 1, 2008, 2:04:53 PM10/1/08
to symfo...@googlegroups.com
aaaaaaaaaêee
foi trabalhoso. mas que bom q deu certo.

2008/10/1 AlphaX <guil...@brisanet.com.br>

AlphaX

unread,
Oct 2, 2008, 10:22:45 AM10/2/08
to symfony-pt
Coloca trabalhoso nisso...

Obrigado Raphael, precisando estamos aí...

On 1 out, 15:04, Raphael <raphox.ara...@gmail.com> wrote:
> aaaaaaaaaêee
> foi trabalhoso. mas que bom q deu certo.
>
> 2008/10/1 AlphaX <guilhe...@brisanet.com.br>
> ...
>
> mais »
Reply all
Reply to author
Forward
0 new messages