Llevo toda la mañana y parte de la tarde peleándome con un tema y viendo que no hay manera de que me salga recurro a vosotros para ver si alguien “me abre los ojos” sobre este asunto.
La cuestión es que quiero recuperar un JSON ubicado en cierta url de Internet. Al principio me cree un método como el siguiente que he probado mil veces para recuperar archivos que se encuentran en mi servidor local y nunca he tenido ningún problema:
Código:
Pero en este caso, cuando ataco a una url de otro dominio (que no es localhost) me entra siempre por la parte de “error”.$.ajax({ beforeSend: function() { }, complete: function() { }, type: "GET", url: "http://www.dominio.com/descargar.php", data: { id: "6", tipo: "json"}, async: false, cache: false, success: function(xhr) { tratarJson(xhr); }, dataType: 'text', error: function(request, status, error) { alert("error"); } }); }
Entonces pensé que podía ser por el problema que existe en Ajax para recuperar recursos que se encuentran en un dominio diferente (que por seguridad esta prohibido). Entonces mirando por internet, encontré que la manera de resolver el problema era haciendo lo siguiente:
Código:
Pero tampoco me funciona. Me sigue saliendo la alerta que puse en la parte de “error”. Pero en cambio, mirando con las herramientas de depuración de firefox, en la sección de “Red” veo que la petición se ha realizado correctamente, devuelve un código 200 OK y encima si pincho en la parte donde se muestra la “respuesta” puedo ver perfectamente el JSON devuelto.$.support.cors = true; $.ajax({ type: "GET", dataType: "jsonp", crossDomain: true, jsonpCallback: "localJsonpCallback", url: "http://www.dominio.com/descargar.php", data: {id: 6, tipo:'JSON'}, success: function (data) { alert(data); }, error: function (data) { alert("error"); alert(data); } });
Entonces lo que no entiendo es porque aparentemente todo esta bién, la petición se realiza, devuelve un código 200, incluso en la cabecera de respuesta veo el JSON devuelto pero en la petición Ajax me sigue entrando por la parte de “Error” y no por la de “Success”.
Para más información, mirando en el depurador de firefox obtengo datos como los siguientes:
status:200
statusText: Success
readyState:4
…………….
Saludos.