Error ‘Sin transporte’ con jQuery llamada ajax en IE

Necesito usar la API foursquare para buscar lugares. Por supuesto, es de dominio cruzado.

No tiene ningún problema en Firefox, pero en Internet Explorer (7, 8, 9 lo he probado).

Mi código de 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 

¿Que debería hacer?

Probé esto en Windows Mobile 7.

Después de MUCHO tiempo dedicado a comprender, finalmente encontré esto:

http://bugs.jquery.com/ticket/10660

La solución es simple, solo establece esto:

 $.support.cors = true; 

y las solicitudes de dominio cruzado Ajax funcionarán!

 jQuery.support.cors = true; $.ajax({ crossDomain: true, url: "", type: "POST", dataType: "xml", data: soapMessage, }); 

necesita hacer que el valor de dominio cruzado sea verdadero

Este problema me ha estado molestando por un tiempo. Como solución alternativa utilizo scripts proxy ubicados en el mismo sitio. Tales scripts simplemente ejecutan una solicitud HTTP no ajax de servidor a servidor (piense en curl y WinHttp.WinHttpRequest) y le 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 más el encabezado ‘Access-Control-Allow-Origin’.

 $.support.cors = true; // this must precede $.ajax({}) configuration $.ajax({ crossDomain: true, // added in jQuery 1.5 headers: { 'Access-Control-Allow-Origin': '*' }, ... }); 

El servicio web que responde estas llamadas también responde con el encabezado ‘Access-Control-Allow-Origin: *’.

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.