Я использую jQuery 2.1.4 и пытаюсь изменить Twitter typeahead.js 0.11.1, чтобы принять запрос ajax в качестве источника. Когда я запускаю страницу из локальной файловой системы file:///C:/...
, она работает как ожидалось, функция ошибки возвращается и появляется предложение noData
, но когда я пытаюсь запустить страницу непосредственно с сервера или даже jsfiddle, успех или ошибка ajax функция возвращается, но предложения не отображаются. Обратный вызов не работает.Передача обратного вызова ajax на sourceahead.js источник
Считаете ли вы, что это связано с обратным вызовом или запрос ajax используется ненадлежащим образом?
Ниже мой код:
HTML
<input class="typeahead" type="text" placeholder="Names" id="tah1">
Javascript
$('.typeahead').typeahead({
hint: true,
highlight: true,
minLength: 1
},
{
name: 'userNames',
source:
function findMatches(q, callback) {
console.log('q: ' + q);
var soapEnv =
"<soap:Envelope xmlns:xsi='http://www.w3.org/2001/XMLSchema-instance' xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns:soap='http://schemas.xmlsoap.org/soap/envelope/'> "
+ "<soap:Body>"
+ "<ResolvePrincipals xmlns='http://schemas.microsoft.com/sharepoint/soap/'>"
+ "<principalKeys>"
+ "<string>" + q + "</string>"
+ "</principalKeys>"
+ "<principalType>All</principalType>"
+ "<addToUserInfoList>true</addToUserInfoList>"
+ "</ResolvePrincipals>"
+ "</soap:Body>"
+ "</soap:Envelope>"
$.ajax({
url: "www./_vti_bin/People.asmx?op=ResolvePrincipals",
type: "POST",
dataType: soapEnv,
success: function(data){
console.log('ajax request successful');
callback(data);
},
error: function(data){
console.log('ajax request error');
var errorValues = ['noData'];
callback(errorValues);
},
contentType: "text/xml; charset=\"utf-8\"",
SOAPAction: "http://schemas.microsoft.com/sharepoint/soap/ResolvePrincipals"
});
}
});
Я также создал эту jsfiddle.
Заранее благодарен!
Этот код вернет проблему «crossDomain», потому что он делает запрос к недоступному URL, но это не настоящая проблема, потому что на моем сервере у меня такая же проблема, и нет никакой " crossDomain ". Я хотел бы получить предложения typeahead, когда запрос будет успешным или будет возвращена ошибка. – user2647749
есть подсказка в строке 10852, если у этой строки 'console.log (syncCalled)' не знаю, почему ваш код немного беспорядок, извините здесь [jsFiddle] (http://jsfiddle.net/x61mbruw/ 10 /) – GuillaumeL
Спасибо, GuillaumeL, это сработало, но я до сих пор не понимаю, что произошло. Почему добавление callback2? – user2647749