【发布时间】:2013-07-31 04:38:45
【问题描述】:
我正在尝试将Typeahead.js 的新版本与需要从 AJAX 中提取的 JSON 结合使用,而不是像他们在示例中那样从 JSON 文件中提取。我只是无法让它工作,我不想缓存 JSON 结果或任何东西,我想从 Yahoo 实时提取它。
我的 HTML 输入是 <input type="text" id="symbol" name="symbol" autofocus autocomplete="off" placeholder="Symbol" onkeyup="onSymbolChange(this.value)" />
我的 AJAX/PHP 文件有这个来检索数据(这部分工作,我用 Firebug 测试过)
header('Content-type:text/html; charset=UTF-8;');
$action = (isset($_GET['action'])) ? $_GET['action'] : null;
$symbol = (isset($_GET['symbol'])) ? $_GET['symbol'] : null;
switch($action) {
case 'autocjson':
getYahooSymbolAutoComplete($symbol);
break;
}
function getYahooSymbolAutoCompleteJson($symbolChar) {
$data = @file_get_contents("http://d.yimg.com/aq/autoc?callback=YAHOO.util.ScriptNodeDataSource.callbacks&query=$symbolChar");
// parse yahoo data into a list of symbols
$result = [];
$json = json_decode(substr($data, strlen('YAHOO.util.ScriptNodeDataSource.callbacks('), -1));
foreach ($json->ResultSet->Result as $stock) {
$result[] = '('.$stock->symbol.') '.$stock->name;
}
echo json_encode(['symbols' => $result]);
}
JS 文件(这是我苦苦挣扎的地方)
function onSymbolChange(symbolChar) {
$.ajax({
url: 'yahoo_autocomplete_ajax.php',
type: 'GET',
dataType: 'json',
data: {
action: 'autocjson',
symbol: symbolChar
},
success: function(response) {
$('#symbol').typeahead({
name: 'symbol',
remote: response.symbols
});
}
});
}
我不认为我应该在 AJAX 成功响应中附加一个预输入,但是我没有看到太多关于 AJAX 的示例(除了先前版本的预输入)...我看到了 JSON 响应输入字符后使用 Firebug,但输入反应不佳。任何指导都将不胜感激,我目前正在做一个概念证明......同样值得知道我正在使用 AJAX,因为我在 HTTPS 中,并且使用直接 http 到 Yahoo API 提供了各种帮助Chrome 和新 Firefox 的不安全页面问题。
更新
为了让它工作,感谢 Hieu Nguyen,我不得不将 AJAX JSON 响应从 echo json_encode(['symbols' => $result]); 修改为 echo json_encode($result);,并修改 JS 文件以使用此处建议的代码:
$('#symbol').typeahead({
name: 'symbol',
remote: 'yahoo_autocomplete_ajax.php?action=autocjson&symbol=%QUERY'
});
【问题讨论】:
标签: bootstrap-typeahead typeahead.js