success - Error ''Sin transporte'' con jQuery llamada ajax en IE
ajax success error (4)
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: *''.
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!
Prueba esta solución:
https://.com/a/14463975/237091
O simplemente coloque este código en su HTML justo después de incluir jquery.
<!--[if lte IE 9]>
<script type=''text/javascript'' src=''//cdnjs.cloudflare.com/ajax/libs/jquery-ajaxtransport-xdomainrequest/1.0.3/jquery.xdomainrequest.min.js''></script>
<![endif]-->
jQuery.support.cors = true;
$.ajax({
crossDomain: true,
url: "",
type: "POST",
dataType: "xml",
data: soapMessage,
});
necesita hacer que el valor de dominio cruzado sea verdadero