我是使用typeahead插件的新手,我的javascript(而不是jquery)技能很糟糕。這是我的JSON:解析鍵入JSON的問題
{"Product":[
{"@ProductCode":"C1010","@CategoryName":"Clips"},
{"@ProductCode":"C1012","@CategoryName":"Clips"},
{"@ProductCode":"C1013","@CategoryName":"Clips"},
{"@ProductCode":"C1014","@CategoryName":"Clips"},
{"@ProductCode":"C1015","@CategoryName":"Clips", "EAN":"0987654321"}
]}
我有預輸入束0.10.5這是我的js:
$(document).ready(function() {
var products = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
limit: 100,
remote: {
url: 'TypeAhead.ashx?q=%QUERY&cat=prod',
filter: function (data) {
return data.Products;
}
}
});
products.initialize();
$("#tbSSearch").typeahead({
highlight: true,
minLength: 2
}, {
source: products.ttAdapter(),
displayKey: function (products) {
return products.product.code;
},
templates: {
header:"<h3>Products</h3>"
}
});
});
Chrome的控制檯給我:
Uncaught TypeError: Cannot read property 'length' of undefined
但是,這是我的jquery.2.1(minified)lib而不是上面的js源碼。瀏覽器在#tbSearch
輸入下顯示沒有彈出窗口。
作爲@Mike建議,jsfiddle http://jsfiddle.net/gw0sfptd/1/但我不得不修改一些東西與本地json一起工作。這也行不通LOL
編輯大衛建議,我應該清理我的JSON。所以它現在是:
[{"Code":"C1010","Gtin13":0,"CategoryName":"Clips"},
{"Code":"C1012","Gtin13":0,"CategoryName":"Clips"},
{"Code":"C1013","Gtin13":0,"CategoryName":"Clips"}]
和JS:
remote: {
url: 'TypeAhead.ashx?q=%QUERY&cat=prod',
filter: function (products) {
return $.map(products.results, function (product) {
return {
value: product.Code
};
});
}
}
datumTokenizer: function (datum) {
return Bloodhound.tokenizers.whitespace(datum.value);
},
queryTokenizer: Bloodhound.tokenizers.whitespace,
但是,沒有工作預輸入和在Firefox控制檯沒有(可用)錯誤。 我希望的輸出將是產品代碼列表,但也是它們所在的類別以及gtin13(如果不爲空),因爲sql會搜索所有這三個選項。我應該在客戶端爲產品製作一個javascript'class'並解析json嗎?我還不清楚全血獵犬的工作原理。 (是的,我已經看過樣品,並閱讀了打字和獵頭的文檔)我不知道這是否可能,但我最終的願望是,當您從鍵入的建議中選擇一個項目時,此產品數據源鏈接到productdetail的.aspx如果你選擇categorydatasource的項目(在此問題visisble),它重定向頁面categorydetail.aspx
您可能想返回'data.Product'而不是'data.products'? – Bergi 2014-10-31 13:25:23
謝謝,但沒有解決它。 'return data.Products;' – 2014-10-31 13:41:02
你可能想把這些全部粘貼到一個jsfiddle中,並將它鏈接到這裏。 – 2014-10-31 13:44:18