Eu preciso usar a API do foursquare para pesquisar locais. Claro que é entre domínios.
Não tem nenhum problema no Firefox, mas sim no Internet Explorer (7, 8, 9 que testei).
Meu código javascript se parece com:
searchVenues: function(searchQuery) {
$.ajax({
url: 'https://api.foursquare.com/v2/venues/search',
data: {
sw: bound_south_west,
ne: bound_north_east,
query: searchQuery.query,
oauth_token: FSQ_OAUTH_TOKEN,
limit: 25,
intent: 'browse',
v: 20120206
},
cache: false,
dataType: 'json',
success: function(data) {
displayResults(data, searchQuery.query);
},
error: function(xhr, status, errorThrown) {
console.log(errorThrown+'\n'+status+'\n'+xhr.statusText);
}
});
}
No Firefox, ele exibe perfeitamente os dados recebidos. No Internet Explorer, ele faz logon no console:
No Transport
Error
Error
O que devo fazer?
ajax
internet-explorer
jquery
cross-domain
Cantou
fonte
fonte
Respostas:
Testei isso no Windows Mobile 7.
Depois de muito tempo gasto para entender, eu finalmente encontrei isto:
http://bugs.jquery.com/ticket/10660
A solução é simples, basta definir isto:
e as solicitações de domínio cruzado Ajax funcionarão!
fonte
você precisa tornar o valor de domínio cruzado verdadeiro
fonte
crossDomain: true
ao argumento de opções.crossDomain: true
disso$.support.cors
por padrão, se não me enganoEste problema está me incomodando há algum tempo. Como solução alternativa, uso scripts de proxy localizados no mesmo site. Esses scripts simplesmente executam uma solicitação HTTP não ajax de servidor para servidor (pense em curl e WinHttp.WinHttpRequest) e passam o status e os dados de volta para o chamador. Funciona, mas obviamente não é muito eficiente porque precisa realizar duas solicitações HTTP.
No meu caso, a solução é uma combinação de todas as coisas descritas acima mais o cabeçalho 'Access-Control-Allow-Origin'.
O serviço da web que atende essas chamadas também responde com o cabeçalho 'Access-Control-Allow-Origin: *'.
fonte
Experimente esta solução:
https://stackoverflow.com/a/14463975/237091
Ou simplesmente coloque este código em seu HTML logo após incluir jquery.
fonte
Acabei de alterar a versão do jquery e substituí o link CDN e funcionou! Faça isso se
crossDomain:true
e$.support.cors
= true não funcionar.fonte