【问题标题】:How to send onkeyup input to symfony controller如何将 onkeyup 输入发送到 symfony 控制器
【发布时间】:2017-02-07 17:33:09
【问题描述】:

我正在使用 tetranz/select2entity-bundle 将 Select2 与 Symfony2 实现

所以我的表格变成了这样:

 $builder->add('nom', Select2EntityType::class, [

        'remote_route' => 'find_tags',
        'class' => 'Emploi\AppBundle\Entity\Tags',
        'primary_key' => 'id',
        'text_property' => 'name',
        'minimum_input_length' => 2,
        'page_limit' => 10,
        'allow_clear' => true,
        'delay' => 250,
        'language' => 'fr',
        'placeholder' => 'Select a tag',

    ])

我的路线:

find_tags:
    path:     /find_tags
    defaults: { _controller: EmploiAppBundle:Tags:findTags }

所以现在我需要搜索我使用的标签 onkeyup 树枝:

{{ form_start(form) }}
{{ form_widget(form.nom, {'attr': {'id': 'tagsID'}}) }}
{{ form_widget(form.score) }}
<input type="submit" value="Create"/>
{{ form_end(form) }}

我在 TagsController 中的函数,因为 select2entity-bundle 需要一个带有两个属性“id”和“text”的 JSON 响应:

public function findTagsAction(Request $request)
{
    $data = $request->get('input');
    $em = $this->getDoctrine()->getManager();
    $query = $em->createQuery(''
        . 'SELECT c.id, c.name '
        . 'FROM EmploiAppBundle:Tags c '
        . 'WHERE c.name LIKE :data '
        . 'ORDER BY c.name ASC'
    )
        ->setParameter('data', '%' . $data . '%');
    $tags = $query->getResult();

    $arrayCollection = array();

    foreach($tags as $item) {
        $arrayCollection[] = array(
            'id' => $item['id'],
            'text' => $item['name']
        );
    }
    return new JsonResponse($arrayCollection);
}

为了发送输入值,我使用了这个 ajax 代码:

$(document).ready(function(){
    $("#tagsID").on('keyup', function() { 
        var input = $(this).val(); 
        if ( input.length >= 2 ) {

        var data = {input: input};

        $.ajax({
            type: "POST",
            url: "{{ path('find_tags') }}",
            data: data, 
            dataType: 'json',
            timeout: 3000,
            success: function(response){
            },

        });
    }
});
});

现在 findTagsAction() 总是返回所有标签,没有检测到输入值的问题。

【问题讨论】:

  • $data = $request->get('input'); 的值是多少?
  • 我认为那是空的,因为 findTagsAction() 总是返回所有结果

标签: php jquery ajax symfony select2


【解决方案1】:
 function goToUrl(id_to_send) {
      var path="{{ path('players_team', { 'id':"PLACEHOLDER"  }) }}";
        var url =  path.replace("PLACEHOLDER", id_to_send);
     $.ajax({url: url, success: function(result){
    $("#players").replaceWith(result);
}});

}

您只需要在 onKeyUp 方法中调用此方法,在我的情况下,我检索结果并将其替换为 $("#players")。

【讨论】:

    【解决方案2】:

    解决方案非常简单,select2entity-bundle 自动为 form_widget 分配一个 id,这就是为什么 javaScript 找不到 id="tagsID" 所以我们需要删除它

    {'attr': {'id': 'tagsID'}}
    

    从这一行开始:

    {{ form_widget(form.nom, {'attr': {'id': 'tagsID'}}) }}
    

    但是将 CSS id 添加到 twig 上的 form_widget 的正确方法是:

    {{ form_widget(form.nom, { 'id' : 'tagsID' }) }}
    

    当我查看在文本字段上键入时发送的 AJAX 请求时,我发现了这个 GET 方法:

    http://127.0.0.1:8000/find_tags?page_limit=10&q=xxx

    所以现在我们需要在控制器中进行更改:

    $data = $request->get('input');
    

    通过这个:

    $data = $request->get('q');
    

    PS:删除之前写的所有JavaScript

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-23
      • 2021-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-09-24
      • 2019-05-24
      相关资源
      最近更新 更多