Php 如何向Symfony添加Ajax功能

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(

我在一个页面中有一组会话,我想使用AJAX删除这些会话。i、 e单击链接,无需导航到新页面,只需删除会话,并显示成功消息

现在,根据给出的答案(对我来说仍然不起作用),我有以下几点:

控制器

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。因此,问题可能来自基本模板,看看我的第二个答案,它解决了
未捕获的语法错误:意外标记}
问题。是的,我已对其进行了调整。但问题似乎不是来自此错误,首先,正如您所要求的,我已删除了该行,但错误仍然存在,我不认为
未捕获的语法错误:意外标记:
指的是此错误,但我已删除它,