私がやろうとしているのは、Ajaxを介してjsonオブジェクトを取得し、Bootstrap Typeaheadに1種類の値を設定することです。
ここに私のコードがあります:
_nameTypeHead: function () {
var _self = this,
searchInput = $('#nameTypeHead'),
arr = [];
function getArray() {
$.ajax({
url: '/Home/AutoComplete',
type: 'post',
dataType: 'json',
data: { searchText: searchInput.val() },
success: function (data) {
$.each(data, function () {
arr.Push(this.Name);
});
return arr;
}
});
}
searchInput.typeahead({
source: getArray()
});
}
_
arrはnullというエラーを受け取ります
私も.parseJSON()
で試しましたが、成功しませんでした:
_$.each($.parseJSON(data), function () {
arr.Push(this.Name);
});
_
TypeahedのJsonオブジェクトの名前Nameのみを表示するにはどうすればよいですか?
Ajaxの成功でalert(JSON.stringify(data));
を入れた場合、Jsonオブジェクトに正しく警告します。
私はゼロから作りました:
_$('#typeahead').typeahead({
source: function (query, process) {
return $.getJSON(
'path/to/lookup',
{ query: query },
function (data) {
return process(data);
});
}
});
_
data
は次のような単純なJSON配列です。
_ [
"John",
"Jane",
"Alfredo",
"Giovanni",
"Superman"
]
_
data
配列が異なる構造を持っている場合は、process()
メソッドに渡す前に再配列するだけです。
ライブのサンプル here を見つけることができます。
編集-JSONデータに基づいて:
_[
{'id':'0', 'name':'John'},
{'id':'1', 'name':'Jane'},
{'id':'2', 'name':'Alfredo'},
...
}
_
getJSON
コールバックは次のようになります。
_function (data) {
var newData = [];
$.each(data, function(){
newData.Push(this.name);
});
return process(newData);
});
_
この要点をご覧ください。オートコンプリート、高速タイパー、キャッシュを処理します
これは私のために働いたものです:-
HTMLセットアップ:
_<!-- HTML Setup-->
<input type="text" id="my-typeahead" />
_
Javascript:
_/*
example remote-data-source
[
{
id:1,
name:'Batman'
},{
id:2,
name:'Superman'
}
]
*/
$('#my-typeahead').typeahead({
hint: true,
highlight: true,
minLength: 1
}, {
name: 'myDataset',
source: function(str, sync, async) {
// abstracting out the "REST call and processing" in a seperate function
restCall(str, async);
},
templates: {
suggestion: function(user) {
return '<div>' + user.name + '</div>';
},
pending: '<div>Please wait...</div>'
}
});
// The function that will make the REST call and return the data
function restCall(str, async) {
return $.ajax('http://url-for-remote-data-source/query?name=' + str, {
// headers and other setting you wish to set-up
headers: {
'Content-Type': 'application/json',
},
// response
success: function(res) {
//processing data on response with 'async'
return async(res.data);
}
});
}
_
参照:
_Typeahead Docs - Datasets
_: https://github.com/Twitter/typeahead.js/blob/master/doc/jquery_typeahead.md#datasets
Jquery **$.ajax()**
: https://api.jquery.com/jquery.ajax/
幸運を。