使用jQuery ajax结果

时间:2017-01-09 16:21:25

标签: javascript jquery html ajax twitter-bootstrap

我想在ajax结果之后或之后设置两个东西:此输入标记的值:

<input type="text" id="typeahead" name='name'  placeholder='Name' class="form-control" data-provide="typeahead" autocomplete="off" />

以及此<li>中的<ul>代码列表:

<div class="dropdown">
            <button class="btn btn-default dropdown-toggle" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
                test label
                <span class="caret"></span>
              </button>
              <ul class="dropdown-menu" aria-labelledby="dropdownMenu1" id="name-dates-dropdown">
                <li>test</li>
              </ul>
            </div>

这个想法是这样的:我在#typeahead输入标签上得到一个ajax结果列表(这很好用),如果我点击任何结果列表,这个项目被设置为这个文本输入的值,另一个ajax请求被触发(这也正常),第二个ajax请求(li列表)的结果被设置为新的#name-dates-dropdown innerHTML。可悲的是,设置功能都没有工作,我不知道为什么...... :(

我正在使用Bootstrap和Bootstrap typeahead。

这是我的jQuery函数:

    <script type="text/javascript">
    $(document).ready(function() {
      $('#typeahead').typeahead({
        source: function (query, process) {
          $.ajax({
            url: '/functions/name-autocomplete.php',
            type: 'POST',
            dataType: 'JSON',
            data: 'query=' + query,
            success: function(data) {
              process(data);
            }
          });
        },
        displayText: function(item) {
            return item
        },
        updater: function (item) {
            $('#typeahead').val(item.value);
            $.ajax({
            url: '/functions/name-dates-autocomplete.php',
            type: 'POST',
            dataType: 'JSON',
            data: 'query=' + item,
            success: function(data) {
              $('#name-dates-dropdown').html(data);
            }
          });
        }
      });
    });
    </script>

非常感谢!

1 个答案:

答案 0 :(得分:0)

首先你得到一个初始化的插件,原始元素可能不是以前的功能。要设置#typeahead的值,请使用

$res = preg_replace('/,\s+(?=\d)/', ' ', $string);

这就是API所说的。

第二,如果你从你的第二个ajax调用中得到json就像这个结构

$('#typeahead').typeahead('val', item.value);

然后你可以遍历它并构建列表

// your ajax response
[

    {"value":1,"title":"Whatever"},
    {"value":2,"title":"Whatever 2"},

]

希望这有帮助。