Tengo un pequeño problema para entender el bit de seguridad de JSON, porque a menudo cosas que, en teoría, no deberían funcionar, al parecer sí. AFAIK, las llamadas de una secuencia de comandos en una página que reside en el dominio A, no se supone que pueden recibir datos de un dominio B. Pero en el código a continuación las llamadas a un dominio externo fallan, mientras que otro pasa. Y ninguno de los dos está lleno de llamadas JSON (jsonp).¿Por qué algunas solicitudes JSON entre dominios fallan pero otras no?
¿Por qué es esto? ¿No se debería prohibir que ambos pasen por las comprobaciones de seguridad del navegador? Obtengo los mismos resultados en Chrome y Firefox. Si el anfitrión de la página HTML de abajo en dropbox.com, Chrome me da este mensaje de error:
XMLHttpRequest no puede cargar http://www.odinfond.no/rest/fund/calc/fundReturn?&id=300&oneTimeInvestment=100000&oneTimeInvestmentDate=2009-11-01&endDate=2010-11-01¤cy=NOK. Origen http://dl.dropbox.com no es permitido por Access-Control-Allow-Origin.
La respuesta JSON que habría obtenido si la llamada se hubiera podido ver se puede ver haciendo clic en this direct link. La llamada al otro servicio vuelve con éxito. Tengo el código siguiente en Dropbox. Try it out here.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
<title>JSON/JSONP test</title>
<script src="jquery.js" type="text/javascript"></script>
</head>
<body>
<script>
service = 'http://www.odinfond.no/rest/fund/calc/fundReturn?';
parameters = {
id: '300',
oneTimeInvestment:'100000',
oneTimeInvestmentDate:'2009-11-01',
endDate:'2010-11-01',
currency:'NOK'
}
$.getJSON(service, parameters, function(data) {
alert("Success");
});
service = 'http://ws.geonames.org/postalCodeLookupJSON?'
parameters = {
postalcode:1540,
country:'NO'
}
$.getJSON(service, parameters, function(data) {
alert(data.postalcodes[0].adminName2);
});
</script>
<p>Use Firebug to see JSON response</p>
</body>
</html>
Gracias, eso tiene mucho sentido! Pensé que las solicitudes eran casi idénticas, pero nunca noté la diferencia en el encabezado de respuesta :-) – oligofren