Ryszard J.

Ryszard J. Informatyk,
wdrożeniowiec
oprogramowania,
szkoleniowiec

Temat: Ajax w Symfony 1.4

Witam

Tym razem zapytam o stosowanie w Symfony Ajax + jQuery

samo jQuery działa bez problemów. Jak ugryzc uruchamianie poszczegolnych akcji poleceniem ajax ?

Zakladam ze chyba trzeba wymusic na akcji, aby nie musiała zwracac widoku - ale jak ?

Czy można stosować polecenia z jQuery np:

$.ajax(
{
type:"POST",
url:"plik.php"

}

Gdzie plik.php zastapiony bedzie nazwa akcji jaka ma byc uruchomiona (jaka przyjmie dane np z formularza)

albo jakis odpowiednik w Symfony , ktory wysle dane (uruchomi) wskazana akcję .


Jak to ugryzc ?

Dzieki za podpowiedzi

konto usunięte

Temat: Ajax w Symfony 1.4

$this->getResponse()->setHttpHeader('Content-type', 'application/json');
return $this->renderText(json_encode('twoja treść'));

konto usunięte

Temat: Ajax w Symfony 1.4

if(!$this->getRequest()->isMethod('post') && !$this->getRequest()->isXmlHttpRequest())

do sprawdzania czy jest to zapytanie ajaxowe ;)

konto usunięte

Temat: Ajax w Symfony 1.4


//Wysyła dane z formularza do zapisu
jQuery("#ajax_form_new_form_submit").click(function() {
jQuery.post("<?php echo url_for(array('module' => 'newsletter', 'action' => 'ajax_form_new_save'), true); ?>", jQuery("#ajax_form_new_form").serialize(),
function(data){
var returned = jQuery.trim(data);


});
});

Czyli po kliknięciu przycisku pobiera dane z formularza o id ajax_form_new_form_submit, serializuje dane formularza i wysyła POSTem do podanej akcji.

W akcji odbieram dane normalnie jak zwykle z requesta z formularza

public function executeAjax_form_new_save(sfWebRequest $request)
{

$temp = $request->getParameter("newsletter");
$form = new NewsletterAjaxForm();
$form->bind($request->getParameter("newsletter_firmowy_mail"));
if ($form->isValid())
{
$email = $form->save();
$status = 'ok';
}
else
{
$status = 'walidacja';
}

return $this->renderPartial('ajax_form_new_template_wynik', array('status' =>$status, 'form' => $form));
}


Zwracam z partialu jakąś treść, ewentualnie przez JSON j.w. i potem ją sobie obrabiam w JS.

To odbiera dane z akcji: (parametr data)

function(data){
var returned = jQuery.trim(data);
//......
}


Może mało eleganckie ale działą :)Tomasz I. edytował(a) ten post dnia 25.01.11 o godzinie 18:28
Ryszard J.

Ryszard J. Informatyk,
wdrożeniowiec
oprogramowania,
szkoleniowiec

Temat: Ajax w Symfony 1.4

OK

umiescilem kod w pliku layout aplikacji w sekcji head tam gdzie mam kod jQuery.

Po kliknieciu submit w formularzu co prawda jest wykonywana komenda:

jQuery("#ajax_form_new_form_submit").click(function() {

ale dochodzi do przeladowania strony a przeciez w Ajaxie tak nie powinno byc

Co jest zle ?
Grzegorz Śliwiński

Grzegorz Śliwiński Programista python

Temat: Ajax w Symfony 1.4

Odpowiedź jest raczej prosta. Jeśli funkcja umieszczona w onclick, czy też oddelegowana do click, nie zwraca ci false, po jej wykonaniu jest uruchamiana czynność, jaka byłaby i tak wykonana.

W ten sposób możesz wyświetlać alerty javascriptowe typu: "Czy na pewno chcesz w to kliknąć"?

konto usunięte

Temat: Ajax w Symfony 1.4

o preventdefault() poczytaj, albo zwróć false na koniec (w js).
Ryszard J.

Ryszard J. Informatyk,
wdrożeniowiec
oprogramowania,
szkoleniowiec

Temat: Ajax w Symfony 1.4

swieta prawda nie bylo tam:

return false;

Mam jeszcze pytanie: czy mozna przyjac ze polecenie:

jQuery.post("<?php echo url_for(array('module' => 'training', 'action' => 'akcja_ajax'), true); ?>", jQuery("#form_dane_do_akcji_ajax").serialize(),

i wysyla dane z form do akcji i jednoczesnie "uruchamia" ta akcje analogicznie jakby to byl plik php ktory mozna wykonac - czyli inny kod znajdujacy sie w akcji tez zostanie wykonany
Ryszard J.

Ryszard J. Informatyk,
wdrożeniowiec
oprogramowania,
szkoleniowiec

Temat: Ajax w Symfony 1.4

Faktycznie tak jest akcja zachowuje sie jak plik php - poprostu dochodzi do wykonania kodu w akcji "w tle" bez przeladowania strony.



Wyślij zaproszenie do