Necesito usar la API de foursquare para buscar lugares. Por supuesto, es de dominio cruzado.
No tiene ningún problema en Firefox pero sí en Internet Explorer (7, 8, 9 he probado).
Mi código javascript se ve así:
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);
}
});
}
En Firefox, muestra perfectamente los datos recibidos. En Internet Explorer, inicia sesión en la consola:
No Transport
Error
Error
¿Qué tengo que hacer?
Respuestas:
Probé esto en Windows Mobile 7.
Después de MUCHO tiempo para entender, finalmente encontré esto:
http://bugs.jquery.com/ticket/10660
La solución es simple, solo configure esto:
y las solicitudes de dominio cruzado de Ajax funcionarán.
fuente
necesita hacer que el valor entre dominios sea verdadero
fuente
crossDomain: true
al argumento de opciones.crossDomain: true
eso es lo que$.support.cors
hace por defecto si no me equivocoEste problema me ha estado molestando durante algún tiempo. Como solución temporal, utilizo scripts de proxy ubicados en el mismo sitio. Dichos scripts simplemente ejecutan una solicitud HTTP no ajax de servidor a servidor (piense en curl y WinHttp.WinHttpRequest) y devuelven el estado y los datos a la persona que llama. Funciona, pero obviamente no es muy eficiente porque tiene que realizar dos solicitudes HTTP.
En mi caso, la solución es una combinación de todas las cosas descritas anteriormente más el encabezado 'Access-Control-Allow-Origin'.
El servicio web que responde a estas llamadas también responde con el encabezado 'Access-Control-Allow-Origin: *'.
fuente
Prueba esta solución:
https://stackoverflow.com/a/14463975/237091
O simplemente coloque este código en su HTML justo después de incluir jquery.
fuente
¡Acabo de cambiar la versión de jquery y reemplacé el enlace CDN y funcionó! Solo hazlo si
crossDomain:true
y$.support.cors
= true no funciona.fuente