У меня много проблем с тем, чтобы загрузочные шрифты работали правильно с источником AJAX.
Если я предупрежу возвращаемый массив, все будет в порядке, даже если я жестко запрограммирую его для проверки. Кажется, что в большинстве случаев он ничего не возвращает или только несколько элементов из массива, когда вы ввели близкое совпадение.
Вот что у меня есть на данный момент:
$('#companyNameInput').typeahead({
source: function(query, process){
$.ajax({
url: ROOT+'Record/checkCompanyName',
async: false,
data: 'q='+query,
type: 'POST',
cache: false,
success: function(data)
{
companiesFinal = [];
map = {};
companies = $.parseJSON(data);
$.each(companies, function(i, v){
map[v.name] = v.id;
companiesFinal.push(v.name);
})
}
})
process(companiesFinal);
// return ['test1', 'test2'] This works fine
return companiesFinal;
}
Кто-нибудь знает, почему это работает правильно?
Вот пример массива объектов, возвращенного из моего PHP-скрипта. Объекты с идентификаторами 1 и 1216 отображаются в раскрывающемся списке ввода, но не другие. Я не вижу никаких закономерностей или подсказок, почему будут отображаться только они, а не другие.
[
{
"id": "1265",
"score": "40",
"name": "LMV AB"
},
{
"id": "10834",
"score": "33",
"name": "Letona"
},
{
"id": "19401",
"score": "33",
"name": "Lewmar"
},
{
"id": "7158",
"score": "33",
"name": "Lazersan"
},
{
"id": "3364",
"score": "33",
"name": "Linpac"
},
{
"id": "1216",
"score": "33",
"name": "L H Evans Limted"
},
{
"id": "1",
"score": "33",
"name": "LH Evans Ltd"
},
{
"id": "7157",
"score": "33",
"name": "Lazersan"
}
]
И, наконец, массив, прошедший в process(companiesFinal)
:
["LMV AB", "Letona", "Lewmar", "Lazersan", "Linpac", "L H Evans Limted", "LH Evans Ltd", "Lazersan"]
Кто-нибудь знает? Я до сих пор совершенно не понимаю, почему это все еще не работает :(
$('#companyNameInput').typeahead({
source: function(query, process){
companyTOut = setTimeout(function(){
return $.ajax({
url: ROOT+'Record/checkCompanyName',
data: 'q='+query,
type: 'POST',
dataType: 'json',
cache: false,
success: function(data)
{
var count = 0;
var companiesFinal = [];
map = [];
$.each(data, function(i, v){
map[v.name] = [v.id, v.score];
companiesFinal.push(v.name);
})
process(companiesFinal);
}
})
}, 250)
},
minLength: 2,
highlighter: function(item)
{
$('#companyNameInput').closest('.control-group').removeClass('success')
companyLocked = false;
return '<span class="unselectable" title="'+map[item].score+'">'+item+'</span>';
},
updater: function(item)
{
selectedEntityId = map[item][0];
selectedCountryScore = map[item][1];
lockCompany(selectedEntityId);
return item;
}
});
$output .= '['.$output;
foreach($results as $result) {
$output .= '{"id":"'.$result['id'].'",';
$output .= '"score":"'.$result['score'].'",';
$output .= '"name":'.json_encode($result['name']).'},';
}
header('Content-Type: application/json');
echo substr($output, 0, strlen($output)-1).']';
Консольный вывод для «parm»:
[Object, Object, Object, Object, Object, Object]
0: Object
id: "25024"
name: "part"
score: "75"
__proto__: Object
1: Object
id: "15693"
name: "pari"
score: "75"
__proto__: Object
2: Object
id: "28079"
name: "Pato"
score: "50"
__proto__: Object
3: Object
id: "18001"
name: "PASS"
score: "50"
__proto__: Object
4: Object
id: "15095"
name: "PSR"
score: "33"
__proto__: Object
5: Object
id: "22662"
name: "PRP"
score: "33"
__proto__: Object
length: 6
__proto__: Array[0]
up
,down
иenter
? - person Marijn   schedule 18.03.2013console.log(data)
в первую строку вашей функции успеха, чтобы (снова) подтвердить, что возвращаются правильные данные? - person Marijn   schedule 19.03.2013