Php 如何向Symfony添加Ajax功能
我在一个页面中有一组会话,我想使用AJAX删除这些会话。i、 e单击链接,无需导航到新页面,只需删除会话,并显示成功消息 现在,根据给出的答案(对我来说仍然不起作用),我有以下几点: 控制器Php 如何向Symfony添加Ajax功能,php,jquery,ajax,symfony,Php,Jquery,Ajax,Symfony,我在一个页面中有一组会话,我想使用AJAX删除这些会话。i、 e单击链接,无需导航到新页面,只需删除会话,并显示成功消息 现在,根据给出的答案(对我来说仍然不起作用),我有以下几点: 控制器 use Symfony\Component\HttpFoundation\JsonResponse; //.. public function ajaxRemoveSessionAction() { $session = $this->getRequest()->getSession(
use Symfony\Component\HttpFoundation\JsonResponse;
//..
public function ajaxRemoveSessionAction()
{
$session = $this->getRequest()->getSession();
$session->remove('name');
return new JsonResponse(array('success' => true));
}
路由:
ajax_remove_session:
pattern: /remove-session
defaults: { _controller: FooTestBundle:Page:ajaxRemoveSession }
<a href="#" id="remove_session">Remove session</a>
<script type="text/javascript">
$(document).ready(function() {
$('#remove_session').click(function(){
event.preventDefault();
$.ajax({
url: {{ url('ajax_remove_session') }},
cache: false,
success: function(result){
$(".success").append(result);
}
});
});
});
</script>
use Symfony\Component\HttpFoundation\JsonResponse;
public function ajaxRemoveSessionAction()
{
// Destroy the desired session
$session = $this->getRequest()->getSession();
$session->remove('name');
return new JsonResponse(array('success' => true));
}
ajax_remove_session:
pattern: /remove-session
defaults: { _controller: FooTestBundle:Page:ajaxRemoveSession }
<a href="#" id="remove_session">Remove session</a>
<script type="text/javascript">
$(document).ready(function() {
$('#remove_session').click(function(){
event.preventDefault();
$.ajax({
url: {{ url('ajax_remove_session') }},
cache: false,
success: function(html){
// do something on success
}
});
});
});
</script>
小枝:
ajax_remove_session:
pattern: /remove-session
defaults: { _controller: FooTestBundle:Page:ajaxRemoveSession }
<a href="#" id="remove_session">Remove session</a>
<script type="text/javascript">
$(document).ready(function() {
$('#remove_session').click(function(){
event.preventDefault();
$.ajax({
url: {{ url('ajax_remove_session') }},
cache: false,
success: function(result){
$(".success").append(result);
}
});
});
});
</script>
use Symfony\Component\HttpFoundation\JsonResponse;
public function ajaxRemoveSessionAction()
{
// Destroy the desired session
$session = $this->getRequest()->getSession();
$session->remove('name');
return new JsonResponse(array('success' => true));
}
ajax_remove_session:
pattern: /remove-session
defaults: { _controller: FooTestBundle:Page:ajaxRemoveSession }
<a href="#" id="remove_session">Remove session</a>
<script type="text/javascript">
$(document).ready(function() {
$('#remove_session').click(function(){
event.preventDefault();
$.ajax({
url: {{ url('ajax_remove_session') }},
cache: false,
success: function(html){
// do something on success
}
});
});
});
</script>
控制器示例:
ajax_remove_session:
pattern: /remove-session
defaults: { _controller: FooTestBundle:Page:ajaxRemoveSession }
<a href="#" id="remove_session">Remove session</a>
<script type="text/javascript">
$(document).ready(function() {
$('#remove_session').click(function(){
event.preventDefault();
$.ajax({
url: {{ url('ajax_remove_session') }},
cache: false,
success: function(result){
$(".success").append(result);
}
});
});
});
</script>
use Symfony\Component\HttpFoundation\JsonResponse;
public function ajaxRemoveSessionAction()
{
// Destroy the desired session
$session = $this->getRequest()->getSession();
$session->remove('name');
return new JsonResponse(array('success' => true));
}
ajax_remove_session:
pattern: /remove-session
defaults: { _controller: FooTestBundle:Page:ajaxRemoveSession }
<a href="#" id="remove_session">Remove session</a>
<script type="text/javascript">
$(document).ready(function() {
$('#remove_session').click(function(){
event.preventDefault();
$.ajax({
url: {{ url('ajax_remove_session') }},
cache: false,
success: function(html){
// do something on success
}
});
});
});
</script>
路由示例:
ajax_remove_session:
pattern: /remove-session
defaults: { _controller: FooTestBundle:Page:ajaxRemoveSession }
<a href="#" id="remove_session">Remove session</a>
<script type="text/javascript">
$(document).ready(function() {
$('#remove_session').click(function(){
event.preventDefault();
$.ajax({
url: {{ url('ajax_remove_session') }},
cache: false,
success: function(result){
$(".success").append(result);
}
});
});
});
</script>
use Symfony\Component\HttpFoundation\JsonResponse;
public function ajaxRemoveSessionAction()
{
// Destroy the desired session
$session = $this->getRequest()->getSession();
$session->remove('name');
return new JsonResponse(array('success' => true));
}
ajax_remove_session:
pattern: /remove-session
defaults: { _controller: FooTestBundle:Page:ajaxRemoveSession }
<a href="#" id="remove_session">Remove session</a>
<script type="text/javascript">
$(document).ready(function() {
$('#remove_session').click(function(){
event.preventDefault();
$.ajax({
url: {{ url('ajax_remove_session') }},
cache: false,
success: function(html){
// do something on success
}
});
});
});
</script>
树枝示例:
ajax_remove_session:
pattern: /remove-session
defaults: { _controller: FooTestBundle:Page:ajaxRemoveSession }
<a href="#" id="remove_session">Remove session</a>
<script type="text/javascript">
$(document).ready(function() {
$('#remove_session').click(function(){
event.preventDefault();
$.ajax({
url: {{ url('ajax_remove_session') }},
cache: false,
success: function(result){
$(".success").append(result);
}
});
});
});
</script>
use Symfony\Component\HttpFoundation\JsonResponse;
public function ajaxRemoveSessionAction()
{
// Destroy the desired session
$session = $this->getRequest()->getSession();
$session->remove('name');
return new JsonResponse(array('success' => true));
}
ajax_remove_session:
pattern: /remove-session
defaults: { _controller: FooTestBundle:Page:ajaxRemoveSession }
<a href="#" id="remove_session">Remove session</a>
<script type="text/javascript">
$(document).ready(function() {
$('#remove_session').click(function(){
event.preventDefault();
$.ajax({
url: {{ url('ajax_remove_session') }},
cache: false,
success: function(html){
// do something on success
}
});
});
});
</script>
$(文档).ready(函数(){
$(“#删除_会话”)。单击(函数(){
event.preventDefault();
$.ajax({
url:{{url('ajax_remove_session')},
cache:false,
成功:函数(html){
//为成功做点什么
}
});
});
});
这些只是需要测试的示例。在AJAX调用中,您使用全局
事件
对象,该对象不是跨浏览器的,不应该使用(例如Firefox没有)
改为在函数调用中传递事件:
$('#remove_session').click(function(e){
e.preventDefault();
// rest of your code
});
如果您这样做,jQuery将关注跨浏览器规范化和正确的行为
有关全局事件对象和传递到函数中的事件之间的差异的更多信息,请参见
如果仍然不起作用
- 在Chrome中打开开发人员工具(F12)
- 单击按钮后,如果有任何错误报告,请检查控制台(控制台选项卡)
- 此外,打开“网络”选项卡,查看单击按钮后是否发出任何请求;什么是响应状态
- 确保控制器能够处理GET请求(因为您没有指定请求类型,并且默认为
GET
)
- 您也可以尝试向AJAX请求中添加
dataType:“json”
,但这应该不是问题,因为Symfony的JsonResponse
应该已经提供了必要的响应头
检查其他位置
- 您发布的错误显示意外的
:
在哪里;调查那条线;您在这里发布的代码是页面上的全部javascript吗
尝试将URL选项的值置于引号之间:
url: '{{ url('ajax_remove_session') }}',
在您对@Laurent Wartel的答案发表评论之后,我假设您现在得到了未捕获的语法错误:意外标记}
。现在很清楚,在click()
函数的末尾有额外的括号
此外,在绑定click()
event之前,您不必等待文档加载。
因此,jQuery尝试将事件绑定到尚未呈现的元素。这是一个常见的陷阱
要在页面加载后运行代码,必须将其包装为info$(function(){…}
。
请阅读完整的解释,因为这是基本的,但非常重要
综上所述,正确代码如下:
<script type="text/javascript">
$(function() {
$('#remove_session').click(function(e){
e.preventDefault();
$.ajax({
url: '{{ url('ajax_remove_session') }}',
cache: false,
success: function(html){
// do something on success
}
}).fail(function(event){
console.log(event);
});
});
});
</script>
$(函数(){
$(“#删除_会话”)。单击(函数(e){
e、 预防默认值();
$.ajax({
url:“{url('ajax_remove_session')}}”,
cache:false,
成功:函数(html){
//为成功做点什么
}
}).失败(功能(事件){
console.log(事件);
});
});
});
你似乎在调试过程中删除了那一行,因为它出现在你最初的问题中,但在你稍后发送的问题中不存在。我现在无法测试它,但如果它起作用,我会给它+50
赏金嗨,我刚刚试过你的代码,因为我不在。不管怎样,只要用户点击链接,我就会跳出来我想从ajaxRemoveSessionAction
中得到一条消息响应,说“会话已删除”,我在jquery中添加了一条简单的警告消息,上面写着//在成功时做点什么
,当我单击链接时,什么都不会显示。只是,锚
会附加到URL中。@Xlaltra您包括了吗jquery代码之前的jquery库?是的,jquery已加载,我仍在尝试。我对jquery了解不多,所以我无法判断您的脚本中是否有输入错误。我做了alert('success'))
在查询代码中,但它没有显示任何内容。我真的需要帮助。谢谢你的兴趣。你在哪个浏览器上测试它?是的,我尝试了这个,但没有任何效果。我确信我的方法有问题。这可能与{url('ajax\u remove\u session')}有关
已解决。我没有使用Symfony的经验,但我在编辑的答案中提供的步骤应该有助于调查哪些数据不正确。我不知道该怎么想。我只是希望,我无论如何都能得到答案。永不放弃。调试。你尝试过我提供的步骤吗?请提供你网站的公共地址,今年5月帮助很大。我正在使用本地主机,我已经尝试过你的方法。但是,我没有得到任何结果,这是我的控制器的全部组成部分。我不知道它出了什么问题,我做到了。并导航到http://127.0.0.1/symfony/web/app_dev.php/hello/testing#
我可以在控制台中看到一个错误,说未捕获的SyntaxError:意外标记}测试:54
这有什么意义吗?你能用页面的呈现HTML/JS更新你的问题吗?这是我得到的屏幕截图。这是我的基本HTML/Twig模板的一个pastbin。因此,问题可能来自基本模板,看看我的第二个答案,它解决了未捕获的语法错误:意外标记}
问题。是的,我已对其进行了调整。但问题似乎不是来自此错误,首先,正如您所要求的,我已删除了该行,但错误仍然存在,我不认为未捕获的语法错误:意外标记:
指的是此错误,但我已删除它,