使用ajax从会话中删除项目

时间:2015-07-07 10:57:08

标签: php jquery ajax symfony symfony-2.1

我的代码有问题,所以我尝试使用ajax请求从会话中删除元素。我在html中的链接:

<a style="padding-left:5px;" href="#" onclick="removeItemFromSession({{ product['product_id'] }})" title="Remove this item">Remove</a>

我的ajax removeItemFromSession()方法:

 <script type="application/javascript">
    function removeItemFromSession(id){
        console.log(id);
        var id = id,
        url_deploy = "http://"+window.location.hostname+":1234"+"/cartItems/delete";
        console.log(url_deploy);
        $.ajax({
            url: url_deploy,
            type: "POST",
            async: true,
            data: { id:id},
            success: function(data){
                document.location.reload(true);
            },
            error: function(){
            }
        });
    }
</script>

/ cartItems / delete的路由:

shoppingCart_delete:
path: /cartItems/delete
defaults: { _controller: ShopDesktopBundle:Basket:delete }
requirements:
    _method:  GET|POST

我在控制器中的删除方法:

 public function deleteAction(){
    $id = $_POST['id'];
    print_r($id);
    $sessionVal = $this->get('session')->get('aBasket');
    unset($sessionVal[$id]);
}

我收到错误:"NetworkError: 500 Internal Server Error - http://shop.com:1234/cartItems/delete"。你能帮我吗 ? Thx提前

2 个答案:

答案 0 :(得分:0)

首先:检查app/logs/prod.log是否有任何有意义的错误消息。如果没有找到,请检查服务器日志(无论是Apache还是其他任何日志)。如果不是生产,您可能希望以_dev模式运行以获得更详细的错误消息。

另一件事:建议避免在`Symfony2中使用superglobals($ _POST,$ _ SESSION,$ _GET,...)。框架本身提供了获得所需的所有东西的方法。

例如,上面的代码应如下所示:

public function deleteAction(){
    # Since you tagged the question with Symfony-2.1
    $id = $this->getRequest()->request->get('id');

    if ( $id ){
        $sessionVal = $this->get('session')->get('aBasket');
        if ( array_key_exists($id, $sessionVal)){
            unset($sessionVal[$id]);
            $sessionVal = $this->get('session')->set('aBasket', $sessionVal);
        }
    }
}

希望这会有所帮助。

答案 1 :(得分:-1)

在PHP中启用错误记录并查看错误日志。错误日志很可能指向问题。如果没有,请从php函数中记录$ sessionVal和$ id的值;这可能会告诉你问题所在。