Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [SF][SF2] Przekazanie 2 parametrów do url'a via ajax
Forum PHP.pl > Forum > PHP > Frameworki
swiezak
Witam.
Siedze od jakiegos czasu nad wydawaloby sie prosta rzecza, a jednak nie wiem, jak naprawic problem. Chce przekazac 2 parametry: status produktu oraz jego id do url'a przy uzyciu JS.

W templatce mam taki oto fragment kodu:
  1. <form id="jsForm" role="form" method="POST" action="">
  2. ...
  3. {% if entity.isActive == 1 %}<a href="#" class="js-isActive" data-action="1" data-id="{{ entity.id }}"><img src="{{ asset(iconsPath) }}/{{ iconTickYES }}" title="Aktywny" alt="Aktywny" /></a>
  4. {% elseif entity.isActive == 0 %}<a href="#" class="js-isActive" data-action="0" data-id="{{ entity.id }}"><img src="{{ asset(iconsPath) }}/{{ iconTickNO }}" title="Nieaktywny" alt="Nieaktywny" /></a>
  5. ...
  6. </form>
  7. (function($) {
  8. function ajaxPost(action, callback) {
  9. ...
  10. }
  11.  
  12. var form = $('#jsForm'),
  13. isActiveBtn = form.find('.js-isActive');
  14.  
  15. isActiveBtn.on('click', function(){
  16. var url = '{{ path('admin_updateisactive', { 'status': 1111, 'id': 2222 }) }}',
  17. status = $(this).data('action'),
  18. id = $(this).data('id');
  19. jsFormUrl = url.replace("1111", status + "2222" + id);
  20. ajaxPost('updateIsActive');
  21. });
  22. form.on('submit', ajaxPost);
  23. })(jQuery);


W pliku routing.yml widnieje zapis:
  1. admin_updateisactive:
  2. path: /admin/updateisactive/{status}/{id}
  3. defaults: { _controller: "AdminBundle:Products:updateIsActive", status: 1, id: 2 }
  4. requirements: { methods: post }


Fragment z kontrolera:
  1. public function updateIsActiveAction(Request $request, $status, $id)
  2. {
  3. $status = ($status == 1);
  4.  
  5. $em = $this->getDoctrine()->getManager();
  6. $product = $em->getRepository('AdminBundle:Products')->findOneById($id);
  7.  
  8. $product->setIsActive($status);
  9. $em->flush();
  10.  
  11. $this->get('session')->getFlashBag()->add('info', "Zmieniono status produktu.");
  12.  
  13. return new Response('1');
  14. }


W kontrolerze zrobiłem sobie podgląd na wartosci parametrow i okazuje sie, ze zostały one sklejone. Dla statusu 0 i produktu o id=7 parametr $status przyjmuje wartosc: 022227. Parametr id przyjmuje zas wartosc 2222.

Jesli dokonam malej zmiany w postaci:
  1. jsFormUrl = url.replace("1111", status + "," + id);

w kontrolerze parametr $status przyjmuje wartosc: 0,7.
Zatem istnieje mozliwosc zamiany stringa na tablice i pobranie jej ostatniego elementu, ktory bedzie w tym wypadku id produktu.

Czy ktos z Was zna mniej inwazyjny sposob, aby przekazac te 2 parametry do url'a via ajax i w kontrolerze pozbyc sie zbednego kodu?
nospor
skoro url ma wygladac tak:
/admin/updateisactive/{status}/{id}
to czemu w ajax generujesz /admin/updateisactive/{status}{id}/{id} questionmark.gif Totalnie bez sensu...

Poza tym czemu poprostu nie wyslesz tych warosci jako parametry POST tylko pchasz je do URL?
kpt_lucek
Polecam to
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.