Проблема с маршрутизацией вызовов Symfony 3 Ajax

Я настраиваю простой вызов Ajax в одной из своих форм. Когда пользователь вводит символы в поле, активируется следующий вызов Ajax:

self.modify = function (input_field) {
    if ($(input_field).val().length > 5) {
        $.post("{{path('get_bio_control_sample')}}", {sample_number: $(input_field).val()},
            function (response) {
                if (response.code == 100 && response.success) {
                    alert(response.sample_number);
                }
            }, "json");
    }
};

Который предназначен для доступа к следующему действию контроллера:

class BioControlController extends Controller {
    /**
     * @Route("/bio_control/sample", name="get_bio_control_sample")
     */
    public function getBioControlSampleAction(Request $request){

        $sample_number = $request->query->get('sample_number');

        $response = array("code" => 100, "success" => true, "sample_number" => $sample_number, "sample_data" => "test");

        return new JsonResponse($response);
    }
}

Однако при активации вызова JS возвращает ошибку:

http://127.0.0.1:8000/omics_experiment/%7B%7Bpath('get_bio_control_sample')%7D%7D 404 (Not Found)

Я обращаюсь к вызову Ajax из omics_experiment/new (который находится в OmicsExperimentController) и использую маршрут /bio_control/sample (как показано в аннотации), но он не работает. Может кто-нибудь объяснить, что я делаю неправильно?

Я использовал этот вопрос в качестве шаблона, поскольку я использую Symfony 3. может означать наличие синтаксических ошибок.


person Darkstarone    schedule 03.04.2017    source источник


Ответы (1)


Я просто должен был сделать это недавно. Я тоже не эксперт по Symfony, но, поскольку я только что сделал это, я могу помочь. Использование Symfony на самом деле не сильно отличается от использования статического URL. Главное, убедиться, что ваш контроллер и маршрут настроены правильно и работают без AJAX, тогда вам просто нужно использовать путь, указанный в вашем маршруте, для вызова .post.

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

Глядя на ваш код еще раз, я думаю, что это может быть проблемой. Изменить это

    $.post("{{path('get_bio_control_sample')}}", {sample_number: 

к этому

    $.post("/bio_control/sample", {sample_number: 

Потому что я думаю, что то, что у вас есть, подходит только для шаблонов веток, поэтому, если Symfony не смотрит на ваш файл JQuery, как на шаблон ветки, тогда он не поймет, как получить маршрут.

person garek007    schedule 03.04.2017
comment
Большой! Рад, что смог помочь! - person garek007; 03.04.2017