首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Symfony2 - Ajax搜索

Symfony2 - Ajax搜索
EN

Stack Overflow用户
提问于 2014-07-23 22:29:32
回答 1查看 4.1K关注 0票数 4

我正在从事一个Symfony2项目,其中我有一个用户实体,我需要一个ajax搜索栏来搜索我的用户。问题是,在我的AJAX响应中,由于某种原因,控制器返回数据库中的所有用户。

js

代码语言:javascript
复制
$('#search').keyup(function() {

     searchText = $(this).val();

     $.ajax({
        type: "GET",
        url: "/Apana/web/app_dev.php/search",
        dataType: "json",
        data: {searchText : searchText},
        success : function(response) 
          {
                console.log(response);
          }
    });
});

控制器

代码语言:javascript
复制
    use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;
use Symfony\Component\HttpFoundation\Response;

use Symfony\Component\Serializer\Serializer;
use Symfony\Component\Serializer\Encoder\XmlEncoder;
use Symfony\Component\Serializer\Encoder\JsonEncoder;
use Symfony\Component\Serializer\Normalizer\GetSetMethodNormalizer;

use Apana\Bundle\MainBundle\Entity\User;

class SearchController extends Controller
{

    public function liveSearchAction(Request $request)
    {

        $string = $this->getRequest()->request->get('searchText');
        //$string = "alfa";
        $users = $this->getDoctrine()
                     ->getRepository('ApanaMainBundle:User')
                     ->findByLetters($string);

        //return users on json format

        $encoders = array(new XmlEncoder(), new JsonEncoder());
        $normalizers = array(new GetSetMethodNormalizer());
        $serializer = new Serializer($normalizers, $encoders);

        $jsonContent = $serializer->serialize($users, 'json');

        $response = new Response($jsonContent);
        return $response;
    }
}

用户储存库

代码语言:javascript
复制
    class UserRepository extends EntityRepository
{

    public function findByLetters($string){
        return $this->getEntityManager()->createQuery('SELECT u FROM ApanaMainBundle:User u  
                WHERE u.firstname LIKE :string OR u.lastname LIKE :string')
                ->setParameter('string','%'.$string.'%')
                ->getResult();
    }
}

如果我为我的字符串参数提供一个静态文本,并访问控制器的路由,它就能正常工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-24 01:29:29

因此,答案是修改以下内容:

代码语言:javascript
复制
     $.ajax({
        type: "GET",
        [...]

代码语言:javascript
复制
     $.ajax({
        type: "POST",
        [...]

这并不奇怪,只是你可能没有真正得到GET参数:How to get the request parameters in symfony2

代码语言:javascript
复制
public function updateAction(Request $request)
{
    // $_GET parameters
    $request->query->get('name');

    // $_POST parameters
    $request->request->get('name');

还有另外几种可能的方法。它也可以解决你的问题,但是如果你不需要的话,最好不要使用GET。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24922133

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档