2015-06-25 2 views
0

Я использую 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.

Заранее благодарен!

ответ

0

Я думаю, что о запросе Междоменных

$.ajax({ 
    crossDomain: true, 
    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" 
}); 

Используйте опцию «crossDomain» и установить его в действительности. Не работайте над JSFiddle, но ваш URL недоступен.

+0

Этот код вернет проблему «crossDomain», потому что он делает запрос к недоступному URL, но это не настоящая проблема, потому что на моем сервере у меня такая же проблема, и нет никакой " crossDomain ". Я хотел бы получить предложения typeahead, когда запрос будет успешным или будет возвращена ошибка. – user2647749

+0

есть подсказка в строке 10852, если у этой строки 'console.log (syncCalled)' не знаю, почему ваш код немного беспорядок, извините здесь [jsFiddle] (http://jsfiddle.net/x61mbruw/ 10 /) – GuillaumeL

+0

Спасибо, GuillaumeL, это сработало, но я до сих пор не понимаю, что произошло. Почему добавление callback2? – user2647749

Смежные вопросы