0

当返回的结果是一个数组时,typeahead.js 效果很好:

  var simpleCountriesList = [
     "Andorra",
     "United Arab Emirates",
     "Afghanistan",
     "Antigua and Barbuda"
  ];

在我的例子中,有一个对象数组,但它被包裹在一个像这样的对象中:

  var countryObjectsWrappedInResults = {
   "results":[
      {
         "name":"Andorra"
      },
      {
         "name":"United Arab Emirates"
      },
      {
         "name":"Afghanistan"
      },
      {
         "name":"Antigua and Barbuda"
      }
   ]
};

或者

{
   "maintainers":[
      {
         "name":"Jake Harding",
         "url":"https://twitter.com/JakeHarding"
      },
      {
         "name":"Tim Trueman",
         "url":"https://twitter.com/timtrueman"
      },
      {
         "name":"Veljko Skarich",
         "url":"https://twitter.com/vskarich"
      }
   ]
}

我创建了一个小的 jsbin 来说明本地和远程的问题:http: //jsbin.com/OseWeKA/5/edit

我正在从 bootstrap typeahead 迁移,在那里我可以使用 updater 将数组从结果中弹出。twitter.js 的等价物是什么?

4

2 回答 2

2

将“过滤器:”添加到您的远程数据集。就像是:

remote: {
    url: '...',
    filter: function (response) {
        retval = [];
        for (var i = 0;  i < response.maintainers.length;  i++) {
            retval.push(response.maintainers[i].name);
        }
        return retval;
    },
}

filter将您的远程响应转换为一组数据。

无论如何,您的小提琴不起作用,因为您的服务器不支持 JSONP,正如您明确指定dataType: "jsonp"的 . 您的服务器也返回text/plainas Content-Type,其中 as 应该返回一个脚本。我认为您的“实时”系统中没有真正的问题。

于 2013-09-29T08:52:34.120 回答
0

我建议对此进行破解。

  var newCountrylist = [];
 $.each( countryObjectsWrappedInResults.results , function(k , v ){
    newCountrylist.push(v.name);
  });
于 2013-09-28T16:41:01.517 回答