2013-08-29 12 views
5

Typeahead.js è una libreria di autosuggestion molto popolare da Twitter.can typeahead.js può fare richieste di domini incrociati?

Ho appena installato e non sembra supportare richieste di domini incrociati tramite JSONP. Viene visualizzato l'errore relativo all'origine remota non consentito.

Ho cercato su Google e non riesco a trovare nulla ad esso correlato.

Qualcuno può confermare se questa funzionalità è supportata o meno.

+0

Typeahead non è in grado di "supportare"/annullare la stessa politica di origine/Access-Control-Allow-Origin problemi - è totalmente fino al browser. Se si desidera una richiesta di dominio incrociato come origine per il typeahead, è necessario gestirla come si fa quando si ha a che fare con tale sfida in qualsiasi altro contesto. – davidkonrad

risposta

5

Per quanto riguarda il tuo primo problema, a giudicare dal tuo messaggio di errore, potresti non averlo implementato correttamente perché typeahead non sta eseguendo una richiesta JSONP.

A partire dal Typeahead.js v0.9.3 è possibile eseguire una richiesta JSONP passando 'jsonp' come il tipo di dati, in questo modo:

$('.typeahead').typeahead({ 
    name: 'jsonpExample', 
    remote: { 
    // ... 
    dataType: 'jsonp' 
    } 
}); 

Troverete che typeahead sarà ora eseguire le richieste JSONP .

UPDATE

a rispondere alle sue seconda edizione. L'autore ha mirato a supportare JSONP - e in generale funziona - ma non funziona correttamente in alcuni casi limite nella versione corrente.

Ad esempio, se è necessario attivare una richiesta JSONP utilizzando una query diversa da "callback", si verrà bloccati. In questa o in una situazione simile, hai due opzioni:

1) Patch typeahead.js te stesso per far funzionare JSONP. Il problema del nome callback, ad esempio, can be fixed by a simple solution

2) Attendere il rilascio di v0.10 quando viene esposto l'oggetto jQuery AJAX completo. Purtroppo è passato un mese dalla sua data di consegna promessa e non ci sono indicazioni che sarà completato nelle prossime settimane

2

Con 0.10.5, funziona su server remoti. In cima alla risposta di C Blanchard, avevo bisogno dell'attributo jsonp in ajax.

var items = new Bloodhound({ 
    ... 
    remote: { 
    url: 'http://localhost/api/items?q=%QUERY', 
    ajax: { 
     jsonp: 'callback', 
     dataType: 'jsonp' 
    } 
}); 
items.initialize() 
... 
$('.typeahead').typeahead(null, { 
    ... 
    source: items.ttAdapter() 
}); 
Problemi correlati