2014-12-29 3 views
-2

Я это просто Ajax/JQuery позвонить в контроллер Symfony2/действиекак настроить AJAX вызова с помощью Symfony2

 $.ajax({ 
     type: 'post', 
     url: 'http://symfony.local:8080/app_dev.php/api/searches/guitar.json', 
     success: function(results) { 

     } 
    }); 

Я должен был бы изменить первую часть URL «http://symfony.local:8080/app_dev.php/api/searches/guitar.json» для того, чтобы сделайте его независимым от фронтального контроллера, который я использую. любая идея о том, как я могу это достичь?

спасибо

+0

URL shuold генерироваться, но не жёстко – Ziumin

+0

[FOSJsRoutingBundle] (https://github.com/FriendsOfSymfony/FOSJsRoutingBundle) – xurshid29

+0

Является ли этот код вставляется в JS файл или в twig/html один? – DonCallisto

ответ

0

Во-первых, почему вы поставляете весь URL? Вы можете пропустить часть домена так, что путь является относительным:

$.ajax({ 
    type: 'post', 
    url: '/app_dev.php/api/searches/guitar.json', 
    success: function(results) { 

    } 
}); 

Во-вторых, вы можете настроить префикс для вашего AJAX вызывает в представлении Symfony:

<script type="text/javascript"></script> 
{% if app.environment == 'dev' %} 
    var root = '/app_dev.php/'; 
{% else %} 
    var root = '/'; 
{% endif %} 
</script> 

Я представил window.root переменная здесь. Вы можете использовать его в сценариях, то:

// ... 
url: root + '/api/searches/guitar.json', 
// ... 

И как это было предложено в комментариях, лучший способ здесь будет пропускание URL в скрипты с отдельным провайдером маршрутизации для JavaScript.

+0

Спасибо за ваш ответ. Я приведу весь URL как пример. то в моем коде app.environment не определен. то, что мне нужно, это создать относительный url для моего вызова ajax, аналогично тому, как когда я создаю путь в шаблоне следующим образом: user3174311

0

Вы можете установить URL-адрес как href и поймать его или установить его как часть тега данных.

Как HREF

Ваша ссылка

<a href="{{ path('your_route') }}" class="ajax-link">Link</a> 

И Javascript

$('a.ajax-link', function (e) { 
    e.preventDefault(); 
    // Stop link updating page 

    var href = $(this).attr('href); 

    $.ajax({ 
     type: 'post', 
     url: href, 
     .... 
    }); 
}); 

Или как поле данных

Ваша ссылка

<a data-href="{{ path('your_route') }}" class="ajax-link">Link</a> 

И Javascript

$('a.ajax-link', function (e) { 
    e.preventDefault(); 
    // Stop link updating page 

    var href = $(this).data('href); 

    ... see above ... 
}); 

С любым из этих способов не использовать для FOSJsRouting или трудно закодированные маршруты.

Смежные вопросы