Javascript -> symfony 控制器请求
Posted
技术标签:
【中文标题】Javascript -> symfony 控制器请求【英文标题】:Javascript -> symfony controller request 【发布时间】: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 是什么样子(源代码,而不是浏览器如何呈现它)如果你想让我们解释为什么它没有做任何有用的事情。 【参考方案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,告诉我,它有点不同:)
【讨论】:
以上是关于Javascript -> symfony 控制器请求的主要内容,如果未能解决你的问题,请参考以下文章
Symfony2,将 css、javascript、图像放在哪里
Symfony & Sonata:如何将 javascript 添加到实体管理表单?
CSS 和 javascript 在 Symfony 项目中不起作用