【问题标题】:Twitter Typeahead Ajax results undefinedTwitter Typeahead Ajax 结果未定义
【发布时间】:2014-03-01 17:10:02
【问题描述】:

我正在使用对我的 PHP 文件的 ajax JSON 调用来构建一个带有 Twitter typeahead 的自动完成功能以获取一些数据,但它一直在下拉结果列表中显示以下内容:

未定义

未定义

未定义

但是当我这样做时:

alert(data); 

我显示了正确的数据,但不知何故自动完成列表一直显示未定义,我已经阅读并尝试了 StackOverflow 上的一些文章,但我似乎无法让它工作。

我必须遵循 jquery 代码:

      $('.item-name .typeahead').typeahead(null,{
      source: function (query, process) {
        $.ajax({
          url: 'ajaxItems.php',
          type: 'POST',
          dataType: 'JSON',
          data: 'query=' + query,
          success: function(data) {
            // alert(data);
            process(data);
          }
        });
      }
    });

我的 ajaxItems.php 有以下代码用于测试目的:

<?PHP
$results = array();

$results[] = 'jeans';
$results[] = 'sweater';

$json =  json_encode($results);
print_r($json);
?>

JSON输出如下:

["jeans","sweater"]

我希望有人能指出我做错了什么或指出我正确的方向。

编辑 我正在使用以下预输入文件: http://twitter.github.io/typeahead.js/releases/latest/typeahead.bundle.js

【问题讨论】:

  • 我在哪里可以找到这个?这只是显示结果的预输入或引导过程函数。
  • @Rikesh,process() 是打字头代码的一部分
  • 抱歉,我卡住了:(它来自 twitter bootstrap 的预输入?
  • 是的,它的 twitter 预输入。
  • 是bootstrap 2.x、3.x还是blog.twitter.com/2013/twitter-typeaheadjs-you-autocomplete-me??假设它是 BS 版本之一:(

标签: php jquery ajax json typeahead


【解决方案1】:

我遇到了完全相同的问题。要修复它,我必须返回一个包含键/值对的数组,其中键为“值”,如下所示:

[{'value': 'first', 'value': 'second', 'value': 'third'}]

我认为typeahead 文档不够清楚,但我相信 displayKey 选项默认设置为“值”。

【讨论】:

  • 谢谢!我遇到过同样的问题。 ASP.Net MVC 应用程序从 LINQ 查询返回字符串数组:“return Json((from i in elementArray select i.StringProperty), JsonRequestBehavior.AllowGet);”这将返回:["A String", "Another String", "Other String"]。 Typehead 只接受以下格式:[{Name: "A String"}, {Name: "Another String"}] 这是通过将 LINQ 选择更改为匿名类型来实现的:"... select new {Name = i. StringProperty}”,然后在 typehead 声明中指定 displayKey:“.typehead({displayKey: 'Name', source: ..."
  • 这个答案也解决了我的问题。
【解决方案2】:

最接近的答案是 ian,尽管它并没有真正起作用(仅返回最后一个值)。工作答案是:

[{'value': 'first'}, {'value': 'second'}, {'value': 'third'}]

【讨论】:

    【解决方案3】:

    我在使用source: 时遇到了类似的问题,最终我使用了remote:。 在你的情况下,它会是这样的:

    $('.item-name .typeahead').typeahead({
        remote: 'ajaxItems.php?query=%QUERY'
      });
    

    请注意,我在typeahead(null,{ 上删除了null,因为我认为这没有必要,但我可能错了。显然,您必须使用$_GET 而不是$_POST,但我认为这样更容易。

    【讨论】:

      【解决方案4】:

      问题是 typeahead 需要一个带有建议的数组。不是 JSON!

      像这样使用$.makeArray()

      success: function(data){
           process($.makeArray(data));
      }
      

      如果没有,可能 JSON.parse() 应该有帮助?

      如果有帮助,请将其标记为答案:)

      【讨论】:

      • 我试过了,没有什么不同,还是 undefined undefined。
      • 它不起作用,但你是对的——它在那里出错了。我未能解决来自 $.ajax 的 JSON 的问题
      • @Adriaan 你试过 JSON.parse() 吗?
      • @davidkonrad 你试过 JSON.parse() 吗?
      猜你喜欢
      • 2015-08-28
      • 2015-01-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-03
      • 1970-01-01
      相关资源
      最近更新 更多