Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/svg/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何在Silex中使用Ajax查询?_Php_Jquery_Ajax_Silex - Fatal编程技术网

Php 如何在Silex中使用Ajax查询?

Php 如何在Silex中使用Ajax查询?,php,jquery,ajax,silex,Php,Jquery,Ajax,Silex,为了构建我的新站点,我决定尝试Silex框架。我在文件里读了很多东西,所以直到现在我都没有问题 我正在制作一个投票系统,我想用Ajax动态地使用它 首先,我宣布了路线: routes.php $app->match('/ajax/vote', mysite\Controller\HomeController::voteAction'); $app['dao.ajax'] = $app->share(function ($app) { return new mysite\DA

为了构建我的新站点,我决定尝试Silex框架。我在文件里读了很多东西,所以直到现在我都没有问题

我正在制作一个投票系统,我想用Ajax动态地使用它

首先,我宣布了路线:

routes.php

$app->match('/ajax/vote', mysite\Controller\HomeController::voteAction');
$app['dao.ajax'] = $app->share(function ($app) {
    return new mysite\DAO\AjaxDAO($app['db']);
});
public function voteAction(Application $app, Request $request) {        

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('IP'));

    $voteAction = $app['dao.ajax']->saveVote($vote);
    return $app['twig']->render('index.html.twig');
}
namespace mysite\DAO;

use Doctrine\DBAL\Connection;

abstract class DAO 
{
    private $db;

    public function __construct(Connection $db) {
        $this->db = $db;
    }

    protected function getDb() {
        return $this->db;
    }

    protected abstract function buildDomainObject($row);
}
namespace mysite\DAO;

use mysite\Domain\Vote;

class AjaxDAO extends DAO 
{
    protected function buildDomainObject($row) {
        $vote = new Vote();
        $vote->setVoteId($row['vote_id']);
        $vote->setBookId($row['book_id']);
        $vote->setVoterIp($row['vt_ip']);
        return $vote;
    }

    public function saveVote(Vote $vote) {

        $voteData = array(
            'vote_id' => $vote->getVoteId(),
            'book_id' => $vote->getBookId(),
            'vt_ip' => $vote->getVoterIp()
        );
        $this->getDb()->insert('t_vote', $voteData);
    }
}
namespace mysite\Domain;

class Vote
{
    private $id;

    private $vote_id;

    private $book_id;

    private $vt_ip;


    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getVoteId() {
        return $this->vote_id;
    }

    public function setVoteId($vote_id) {
        $this->vote_id = $vote_id;
    }

    public function getBookId() {
        return $this->book_id;
    }

    public function setBookId($book_id) {
        $this->book_id = $book_id;
    }

    public function getVoterIp() {
        return $this->vt_ip;
    }

    public function setVoterIp($vt_ip) {
        $this->vt_ip = $vt_ip;
    }
}
public function voteAction(Application $app, Request $request) {
    ...

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('vt_ip'));

    $voteAction = $app['dao.ajax']->saveVote($vote);

    ...
}
public function saveVote(Vote $vote) {
    $voteData = array(
        'vote_id' => $vote->getVoteId(),
        ...
    );
    $this->getDb()->insert('t_vote', $voteData);
}
我注册了这项服务:

app.php

$app->match('/ajax/vote', mysite\Controller\HomeController::voteAction');
$app['dao.ajax'] = $app->share(function ($app) {
    return new mysite\DAO\AjaxDAO($app['db']);
});
public function voteAction(Application $app, Request $request) {        

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('IP'));

    $voteAction = $app['dao.ajax']->saveVote($vote);
    return $app['twig']->render('index.html.twig');
}
namespace mysite\DAO;

use Doctrine\DBAL\Connection;

abstract class DAO 
{
    private $db;

    public function __construct(Connection $db) {
        $this->db = $db;
    }

    protected function getDb() {
        return $this->db;
    }

    protected abstract function buildDomainObject($row);
}
namespace mysite\DAO;

use mysite\Domain\Vote;

class AjaxDAO extends DAO 
{
    protected function buildDomainObject($row) {
        $vote = new Vote();
        $vote->setVoteId($row['vote_id']);
        $vote->setBookId($row['book_id']);
        $vote->setVoterIp($row['vt_ip']);
        return $vote;
    }

    public function saveVote(Vote $vote) {

        $voteData = array(
            'vote_id' => $vote->getVoteId(),
            'book_id' => $vote->getBookId(),
            'vt_ip' => $vote->getVoterIp()
        );
        $this->getDb()->insert('t_vote', $voteData);
    }
}
namespace mysite\Domain;

class Vote
{
    private $id;

    private $vote_id;

    private $book_id;

    private $vt_ip;


    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getVoteId() {
        return $this->vote_id;
    }

    public function setVoteId($vote_id) {
        $this->vote_id = $vote_id;
    }

    public function getBookId() {
        return $this->book_id;
    }

    public function setBookId($book_id) {
        $this->book_id = $book_id;
    }

    public function getVoterIp() {
        return $this->vt_ip;
    }

    public function setVoterIp($vt_ip) {
        $this->vt_ip = $vt_ip;
    }
}
public function voteAction(Application $app, Request $request) {
    ...

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('vt_ip'));

    $voteAction = $app['dao.ajax']->saveVote($vote);

    ...
}
public function saveVote(Vote $vote) {
    $voteData = array(
        'vote_id' => $vote->getVoteId(),
        ...
    );
    $this->getDb()->insert('t_vote', $voteData);
}
然后是关联的控制器:

HomeController.php

$app->match('/ajax/vote', mysite\Controller\HomeController::voteAction');
$app['dao.ajax'] = $app->share(function ($app) {
    return new mysite\DAO\AjaxDAO($app['db']);
});
public function voteAction(Application $app, Request $request) {        

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('IP'));

    $voteAction = $app['dao.ajax']->saveVote($vote);
    return $app['twig']->render('index.html.twig');
}
namespace mysite\DAO;

use Doctrine\DBAL\Connection;

abstract class DAO 
{
    private $db;

    public function __construct(Connection $db) {
        $this->db = $db;
    }

    protected function getDb() {
        return $this->db;
    }

    protected abstract function buildDomainObject($row);
}
namespace mysite\DAO;

use mysite\Domain\Vote;

class AjaxDAO extends DAO 
{
    protected function buildDomainObject($row) {
        $vote = new Vote();
        $vote->setVoteId($row['vote_id']);
        $vote->setBookId($row['book_id']);
        $vote->setVoterIp($row['vt_ip']);
        return $vote;
    }

    public function saveVote(Vote $vote) {

        $voteData = array(
            'vote_id' => $vote->getVoteId(),
            'book_id' => $vote->getBookId(),
            'vt_ip' => $vote->getVoterIp()
        );
        $this->getDb()->insert('t_vote', $voteData);
    }
}
namespace mysite\Domain;

class Vote
{
    private $id;

    private $vote_id;

    private $book_id;

    private $vt_ip;


    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getVoteId() {
        return $this->vote_id;
    }

    public function setVoteId($vote_id) {
        $this->vote_id = $vote_id;
    }

    public function getBookId() {
        return $this->book_id;
    }

    public function setBookId($book_id) {
        $this->book_id = $book_id;
    }

    public function getVoterIp() {
        return $this->vt_ip;
    }

    public function setVoterIp($vt_ip) {
        $this->vt_ip = $vt_ip;
    }
}
public function voteAction(Application $app, Request $request) {
    ...

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('vt_ip'));

    $voteAction = $app['dao.ajax']->saveVote($vote);

    ...
}
public function saveVote(Vote $vote) {
    $voteData = array(
        'vote_id' => $vote->getVoteId(),
        ...
    );
    $this->getDb()->insert('t_vote', $voteData);
}
因此,当我点击投票按钮时,它应该(重新)呈现索引页面

我的刀类:

DAO.php

$app->match('/ajax/vote', mysite\Controller\HomeController::voteAction');
$app['dao.ajax'] = $app->share(function ($app) {
    return new mysite\DAO\AjaxDAO($app['db']);
});
public function voteAction(Application $app, Request $request) {        

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('IP'));

    $voteAction = $app['dao.ajax']->saveVote($vote);
    return $app['twig']->render('index.html.twig');
}
namespace mysite\DAO;

use Doctrine\DBAL\Connection;

abstract class DAO 
{
    private $db;

    public function __construct(Connection $db) {
        $this->db = $db;
    }

    protected function getDb() {
        return $this->db;
    }

    protected abstract function buildDomainObject($row);
}
namespace mysite\DAO;

use mysite\Domain\Vote;

class AjaxDAO extends DAO 
{
    protected function buildDomainObject($row) {
        $vote = new Vote();
        $vote->setVoteId($row['vote_id']);
        $vote->setBookId($row['book_id']);
        $vote->setVoterIp($row['vt_ip']);
        return $vote;
    }

    public function saveVote(Vote $vote) {

        $voteData = array(
            'vote_id' => $vote->getVoteId(),
            'book_id' => $vote->getBookId(),
            'vt_ip' => $vote->getVoterIp()
        );
        $this->getDb()->insert('t_vote', $voteData);
    }
}
namespace mysite\Domain;

class Vote
{
    private $id;

    private $vote_id;

    private $book_id;

    private $vt_ip;


    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getVoteId() {
        return $this->vote_id;
    }

    public function setVoteId($vote_id) {
        $this->vote_id = $vote_id;
    }

    public function getBookId() {
        return $this->book_id;
    }

    public function setBookId($book_id) {
        $this->book_id = $book_id;
    }

    public function getVoterIp() {
        return $this->vt_ip;
    }

    public function setVoterIp($vt_ip) {
        $this->vt_ip = $vt_ip;
    }
}
public function voteAction(Application $app, Request $request) {
    ...

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('vt_ip'));

    $voteAction = $app['dao.ajax']->saveVote($vote);

    ...
}
public function saveVote(Vote $vote) {
    $voteData = array(
        'vote_id' => $vote->getVoteId(),
        ...
    );
    $this->getDb()->insert('t_vote', $voteData);
}
然后,表决功能:

AjaxDAO.php

$app->match('/ajax/vote', mysite\Controller\HomeController::voteAction');
$app['dao.ajax'] = $app->share(function ($app) {
    return new mysite\DAO\AjaxDAO($app['db']);
});
public function voteAction(Application $app, Request $request) {        

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('IP'));

    $voteAction = $app['dao.ajax']->saveVote($vote);
    return $app['twig']->render('index.html.twig');
}
namespace mysite\DAO;

use Doctrine\DBAL\Connection;

abstract class DAO 
{
    private $db;

    public function __construct(Connection $db) {
        $this->db = $db;
    }

    protected function getDb() {
        return $this->db;
    }

    protected abstract function buildDomainObject($row);
}
namespace mysite\DAO;

use mysite\Domain\Vote;

class AjaxDAO extends DAO 
{
    protected function buildDomainObject($row) {
        $vote = new Vote();
        $vote->setVoteId($row['vote_id']);
        $vote->setBookId($row['book_id']);
        $vote->setVoterIp($row['vt_ip']);
        return $vote;
    }

    public function saveVote(Vote $vote) {

        $voteData = array(
            'vote_id' => $vote->getVoteId(),
            'book_id' => $vote->getBookId(),
            'vt_ip' => $vote->getVoterIp()
        );
        $this->getDb()->insert('t_vote', $voteData);
    }
}
namespace mysite\Domain;

class Vote
{
    private $id;

    private $vote_id;

    private $book_id;

    private $vt_ip;


    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getVoteId() {
        return $this->vote_id;
    }

    public function setVoteId($vote_id) {
        $this->vote_id = $vote_id;
    }

    public function getBookId() {
        return $this->book_id;
    }

    public function setBookId($book_id) {
        $this->book_id = $book_id;
    }

    public function getVoterIp() {
        return $this->vt_ip;
    }

    public function setVoterIp($vt_ip) {
        $this->vt_ip = $vt_ip;
    }
}
public function voteAction(Application $app, Request $request) {
    ...

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('vt_ip'));

    $voteAction = $app['dao.ajax']->saveVote($vote);

    ...
}
public function saveVote(Vote $vote) {
    $voteData = array(
        'vote_id' => $vote->getVoteId(),
        ...
    );
    $this->getDb()->insert('t_vote', $voteData);
}
投票阶级:

Vote.php

$app->match('/ajax/vote', mysite\Controller\HomeController::voteAction');
$app['dao.ajax'] = $app->share(function ($app) {
    return new mysite\DAO\AjaxDAO($app['db']);
});
public function voteAction(Application $app, Request $request) {        

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('IP'));

    $voteAction = $app['dao.ajax']->saveVote($vote);
    return $app['twig']->render('index.html.twig');
}
namespace mysite\DAO;

use Doctrine\DBAL\Connection;

abstract class DAO 
{
    private $db;

    public function __construct(Connection $db) {
        $this->db = $db;
    }

    protected function getDb() {
        return $this->db;
    }

    protected abstract function buildDomainObject($row);
}
namespace mysite\DAO;

use mysite\Domain\Vote;

class AjaxDAO extends DAO 
{
    protected function buildDomainObject($row) {
        $vote = new Vote();
        $vote->setVoteId($row['vote_id']);
        $vote->setBookId($row['book_id']);
        $vote->setVoterIp($row['vt_ip']);
        return $vote;
    }

    public function saveVote(Vote $vote) {

        $voteData = array(
            'vote_id' => $vote->getVoteId(),
            'book_id' => $vote->getBookId(),
            'vt_ip' => $vote->getVoterIp()
        );
        $this->getDb()->insert('t_vote', $voteData);
    }
}
namespace mysite\Domain;

class Vote
{
    private $id;

    private $vote_id;

    private $book_id;

    private $vt_ip;


    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getVoteId() {
        return $this->vote_id;
    }

    public function setVoteId($vote_id) {
        $this->vote_id = $vote_id;
    }

    public function getBookId() {
        return $this->book_id;
    }

    public function setBookId($book_id) {
        $this->book_id = $book_id;
    }

    public function getVoterIp() {
        return $this->vt_ip;
    }

    public function setVoterIp($vt_ip) {
        $this->vt_ip = $vt_ip;
    }
}
public function voteAction(Application $app, Request $request) {
    ...

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('vt_ip'));

    $voteAction = $app['dao.ajax']->saveVote($vote);

    ...
}
public function saveVote(Vote $vote) {
    $voteData = array(
        'vote_id' => $vote->getVoteId(),
        ...
    );
    $this->getDb()->insert('t_vote', $voteData);
}
现在,包含Ajax的jQuery:

vote.js

$('button').on('click', function like(e) {
    $(this).off('click');
    e.preventDefault();

    var vote_id = '{{ vote_id }}';
    var book_id = $(this).attr('data-book');
    var IP = '{{ getUserIp() }}';

    if ($(this).hasClass('active')) {
        $.ajax({
            type: 'POST',
            url: '/ajax/vote',
            data: {'POST_type': 'vote', 'book_id': book_id, 'IP': IP},
            success: function(html) {
                $('button').removeClass('active').addClass('disabled');
            },
            error: function() {
                alert('error');
            }
        });
    };
});
正如你所理解的,当我点击投票按钮时,我有一个错误警报。当我访问mysite/ajax/vote链接时,出现以下错误:

Notice: Undefined property: mysite\DAO\AjaxDAO::$request
我查阅了官方文件和以前的StackOverflow问题,但我只找到了,这对我没有帮助


EDIT:我刚刚读到Silex只支持使用Ajax进行Json数据交换。也许这就是问题所在?

AjaxDAO.php
方法
saveVote
中存在错误。您尝试使用未在此类中定义的属性
$this->request
。最好在控制器中设置投票字段,并将其传输到
saveVote

HomeController.php

$app->match('/ajax/vote', mysite\Controller\HomeController::voteAction');
$app['dao.ajax'] = $app->share(function ($app) {
    return new mysite\DAO\AjaxDAO($app['db']);
});
public function voteAction(Application $app, Request $request) {        

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('IP'));

    $voteAction = $app['dao.ajax']->saveVote($vote);
    return $app['twig']->render('index.html.twig');
}
namespace mysite\DAO;

use Doctrine\DBAL\Connection;

abstract class DAO 
{
    private $db;

    public function __construct(Connection $db) {
        $this->db = $db;
    }

    protected function getDb() {
        return $this->db;
    }

    protected abstract function buildDomainObject($row);
}
namespace mysite\DAO;

use mysite\Domain\Vote;

class AjaxDAO extends DAO 
{
    protected function buildDomainObject($row) {
        $vote = new Vote();
        $vote->setVoteId($row['vote_id']);
        $vote->setBookId($row['book_id']);
        $vote->setVoterIp($row['vt_ip']);
        return $vote;
    }

    public function saveVote(Vote $vote) {

        $voteData = array(
            'vote_id' => $vote->getVoteId(),
            'book_id' => $vote->getBookId(),
            'vt_ip' => $vote->getVoterIp()
        );
        $this->getDb()->insert('t_vote', $voteData);
    }
}
namespace mysite\Domain;

class Vote
{
    private $id;

    private $vote_id;

    private $book_id;

    private $vt_ip;


    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getVoteId() {
        return $this->vote_id;
    }

    public function setVoteId($vote_id) {
        $this->vote_id = $vote_id;
    }

    public function getBookId() {
        return $this->book_id;
    }

    public function setBookId($book_id) {
        $this->book_id = $book_id;
    }

    public function getVoterIp() {
        return $this->vt_ip;
    }

    public function setVoterIp($vt_ip) {
        $this->vt_ip = $vt_ip;
    }
}
public function voteAction(Application $app, Request $request) {
    ...

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('vt_ip'));

    $voteAction = $app['dao.ajax']->saveVote($vote);

    ...
}
public function saveVote(Vote $vote) {
    $voteData = array(
        'vote_id' => $vote->getVoteId(),
        ...
    );
    $this->getDb()->insert('t_vote', $voteData);
}
AjaxDAO.php

$app->match('/ajax/vote', mysite\Controller\HomeController::voteAction');
$app['dao.ajax'] = $app->share(function ($app) {
    return new mysite\DAO\AjaxDAO($app['db']);
});
public function voteAction(Application $app, Request $request) {        

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('IP'));

    $voteAction = $app['dao.ajax']->saveVote($vote);
    return $app['twig']->render('index.html.twig');
}
namespace mysite\DAO;

use Doctrine\DBAL\Connection;

abstract class DAO 
{
    private $db;

    public function __construct(Connection $db) {
        $this->db = $db;
    }

    protected function getDb() {
        return $this->db;
    }

    protected abstract function buildDomainObject($row);
}
namespace mysite\DAO;

use mysite\Domain\Vote;

class AjaxDAO extends DAO 
{
    protected function buildDomainObject($row) {
        $vote = new Vote();
        $vote->setVoteId($row['vote_id']);
        $vote->setBookId($row['book_id']);
        $vote->setVoterIp($row['vt_ip']);
        return $vote;
    }

    public function saveVote(Vote $vote) {

        $voteData = array(
            'vote_id' => $vote->getVoteId(),
            'book_id' => $vote->getBookId(),
            'vt_ip' => $vote->getVoterIp()
        );
        $this->getDb()->insert('t_vote', $voteData);
    }
}
namespace mysite\Domain;

class Vote
{
    private $id;

    private $vote_id;

    private $book_id;

    private $vt_ip;


    public function getId() {
        return $this->id;
    }

    public function setId($id) {
        $this->id = $id;
    }

    public function getVoteId() {
        return $this->vote_id;
    }

    public function setVoteId($vote_id) {
        $this->vote_id = $vote_id;
    }

    public function getBookId() {
        return $this->book_id;
    }

    public function setBookId($book_id) {
        $this->book_id = $book_id;
    }

    public function getVoterIp() {
        return $this->vt_ip;
    }

    public function setVoterIp($vt_ip) {
        $this->vt_ip = $vt_ip;
    }
}
public function voteAction(Application $app, Request $request) {
    ...

    $vote = new Vote();
    $vote->setVoteId($request->get('vote_id'));
    $vote->setBookId($request->get('book_id'));
    $vote->setVoterIp($request->get('vt_ip'));

    $voteAction = $app['dao.ajax']->saveVote($vote);

    ...
}
public function saveVote(Vote $vote) {
    $voteData = array(
        'vote_id' => $vote->getVoteId(),
        ...
    );
    $this->getDb()->insert('t_vote', $voteData);
}

我没有使用过Silex,我对它不是很熟悉,但我喜欢观看

您可以为大多数HTTP方法创建控制器。只需在应用程序上调用以下方法之一:get、post、put、delete、patch

在HomeController.php中,您使用get(),这个HTTP方法不也应该在ajax中使用吗

示例

$('button').on('click', function like(e) {
    $(this).off('click');
    e.preventDefault();

    var vote_id = 'Vote ID';
    var book_id = $(this).attr('data-book');
    var IP = getUserIp();

    if ($(this).hasClass('active')) {
        $.ajax({
            type: 'GET',
            url: '/ajax/vote?vote_id='+vote_id+'&book_id='+book_id+'vt_ip='+IP,
            success: function(html) {
                $('button').removeClass('active').addClass('disabled');
            },
            error: function() {
                alert('error');
            }
        });
    };
});

值得检查与ajax请求一起发送的标题中的内容。在silex
application/json中,请求不作为标准
x-form处理。您可以使用中提到的解决方案解决此问题(此解决方案对2.*和1.3.*均有效)

至于通知,我将从这里开始查看:

$vote->setVoteId($request->get('vote_id'));
$vote->setBookId($request->get('book_id'));
$vote->setVoterIp($request->get('IP'));
如果您正在发出一些非标准的post请求,那么那些
$request->get
方法调用可能会返回一些超出您预期的内容(例如请求对象?)。由于您没有进行验证或消毒,您可能没有注意到

您还可以更改此设置:

$app->match('/ajax/vote', mysite\Controller\HomeController::voteAction');
致:


因为没有指定方法的
match
将匹配每种类型的请求。现在可能不重要,但以后会省去您的麻烦。

谢谢您的回答,但现在,我的错误是:
注意:未定义的属性:mysite\Controller\HomeController::$request
$request
,而不是
$this->request
,我已经更改了我的答案我用你的答案编辑了我的代码,但我仍然有一个错误:
执行“插入投票(musite\Domain\Voteid,mysite\Domain\Votevote\id,mysite\Domain\Votebook\id,mysite\Domain\Votevt\ip)值(?,,?,?)时发生异常,带有参数[null,null,null,null]:
。。。我在AjaxDAO中使用了
(array)
,因为当我想插入$data时,它需要一个数组,而它是一个对象。哦,你不用orm。。。除了创建包含所有字段和应放置在id DB中的值的数组外,请查看答案我编辑了我的代码,这要感谢您的新答案,我有一个错误
,在使用参数[null,null,null]执行“插入到t_投票(投票id,图书id,vt_ip)值(?,?)”时发生异常:
所以我认为错误是因为我直接访问了mysite/ajax/vote,但当我转到索引并单击按钮时,它返回了一个错误500。