【问题标题】:Javascript -> symfony controller requestJavascript -> symfony 控制器请求
【发布时间】:2021-06-16 03:39:58
【问题描述】:

我有 HomeController.php 的功能:

public function foo(Request $request) : Response
    {
        do something
    }

我也有 routes.yaml 来访问这个控制器

app_foo:
    path: /foo
    controller: App\Controller\HomeController::foo

问题是,我如何通过单击 javascript 中动态生成的链接来执行 foo()。 我尝试了什么:

<a href="{{ url(app_foo) }}"> link </a>

$(document).on('click', 'a', function () {
$.ajax({
    type: "POST",
    url: "/app_foo",

    dataType: "json",
    success: function(response) {
        console.log(response);
    }
});

【问题讨论】:

  • 第一种方法什么也没做,但第二种方法用 ajax 返回 500
  • 我敢打赌它什么都没做这不是真的。我敢打赌它会输出一些 HTML。您可能的意思是它输出的 HTML 没有有用 - 但我们仍然需要知道 HTML 是什么样子(源代码,而不是浏览器如何呈现它)如果你想让我们解释为什么它没有做任何有用的事情。

标签: javascript php ajax symfony post


【解决方案1】:

您应该能够使用在函数回调中收到的event 对象并调用event.preventDefault(); 来停止浏览器的本机点击处理程序,还可以使用$(this).attr('href') 来获取URL 的href 部分,这样你没有硬编码它。我没有尝试过这段代码,但它通常应该可以工作:

        $(document).on('click', 'a', function (event) {
            event.preventDefault();
            $.ajax({
                type: "POST",
                url: $(this).attr('href'),

                dataType: "json",
                success: function (response) {
                    console.log(response);
                }
            });
        });

【讨论】:

    【解决方案2】:

    如果你想在 JS 中使用你的路由,你需要用FOSJsRoutingBundle 暴露它 您的路线将变为:

    app_foo:
        path: /foo
        controller: App\Controller\HomeController::foo
        options:
            expose: true
    
    

    在你的模板(或父模板)中添加

    <script src="{{ asset('bundles/fosjsrouting/js/router.js') }}"></script>
    <script src="{{ path('fos_js_routing_js', { callback: 'fos.Router.setData' }) }}"></script>
    

    还有你的javascript:

    $(document).on('click', 'a', function () {
    $.ajax({
        type: "POST",
        url: Routing.generate("app_foo"),
    
        dataType: "json",
        success: function(response) {
            console.log(response);
        }
    });
    

    如果你使用 webpack.encore 生成 JS,告诉我,它有点不同:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-22
      • 2017-02-26
      • 2015-08-11
      • 1970-01-01
      • 2021-12-17
      相关资源
      最近更新 更多