2013-05-16 12 views
5

Próbuję użyć varaible jquery wewnątrz szablonu gałązka wysłać przez ajax, ale nie może uzyskać dostępu do zmiennej jquery wewnątrz gałązka:zmienna jquery wewnątrz szablonu gałązka

mojego kodu jest:

<script type="text/javascript"> 
      jQuery(document).ready(function(){ 


       jQuery("#my_input").change(function(){ 

        var value = jQuery("#my_input").val(); 

        jQuery.ajax({ 

         url: "{{ path('ParteAccidentes_ajax', {'emergencia': value}) }}", 
         timeout: 5000, 
         success: function(data) { 
          alert('ok'); 
         }, 
         error: function() { 
          alert('mal'); 
         } 
        }); 

       }); 

      }); 
     </script> 

błąd show jest wartość zmienna nie istnieje (w "URL: ..." linia)

Dzięki!

Odpowiedz

10

Problem polega na tym, że Twig jest uruchamiany wcześniej niż JavaScript, a zmienna "id_emergencia" nie jest rozpoznawana przez Twig. Możesz zrobić lewę. Możesz wstawić ciąg znaków, jako parametr, a następnie w kodzie JavaScript zastąpić ciąg wartością zmiennej. W ten sposób zawsze będziesz mieć poprawny adres URL przed uruchomieniem petycji AJAX.

Można zrobić coś takiego:

<script type="text/javascript"> 
           jQuery(document).ready(function(){ 

               jQuery("#my_input").change(function(){ 
                    
                   var value = jQuery("#my_input").val(); 
                   var url = "{{ path('ParteAccidentes_ajax', {'emergencia': 'text'}) }}"; 
                   url = url.replace("text", value); 
                                        
                   jQuery.ajax({ 
                        
                       url: url, 
                       timeout: 5000, 
                       success: function(data) { 
          alert ('ok'); 
                       }, 
                       error: function() { alert ('mal'); 
                       } 
                   }); 

               }); 

           });   
       </script> 
+0

Miły człowiek, dzięki –

+0

Znakomity .. !! dzięki –

2

Oczywiście, że nie istnieje.

Zmienna value jest po prostu tekstem na gałązkę. Pamiętaj:

Najpierw części Twig są renderowane, następnie są wysyłane do przeglądarki, następnie przeglądarka renderuje zawartość i wykonuje Javascript.

Linia {{ path('ParteAccidentes_ajax', {'emergencia': value}) }} jest wykonywana, zanim value zostanie parsowana jako javascript.

Robisz to również w programie obsługi zdarzeń.

W jaki sposób gałązka (skoro jest to tylko biblioteka PHP) zmienia adres URL ścieżki dla wykonanego zdarzenia javascript?

Ponieważ po prostu chcesz zaktualizować URL w oparciu o symfony ścieżek i zmiennej JavaScript, proszę spojrzeć na ten pakiet: https://github.com/FriendsOfSymfony/FOSJsRoutingBundle

Zapewnia dokładną funkcjonalność chcesz.

+0

używając innej wiązki tylko dla uzyskania trasy wydaje się być przesadą. Proste rozwiązanie [replace()] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/replace) wydaje się lepsze pod względem wydajności. Chociaż dobrze wiedzieć, że istnieje pakiet tylko do tego! :) –

Powiązane problemy