Ho un po 'di problemi a capire il bit di sicurezza attorno a JSON, perché spesso cose che in teoria non dovrebbero funzionare, apparentemente lo fanno. AFAIK, le chiamate da uno script su una pagina che risiede sul dominio A, non dovrebbero essere in grado di ricevere dati da un dominio B. Ma nel codice sottostante le chiamate a un dominio esterno falliscono, mentre un altro passa attraverso. E nessuno dei due è pieno di chiamate JSON (jsonp).Perché alcune richieste JSON tra domini falliscono ma altre no?
Perché è questo? Non dovrebbero essere entrambi non autorizzati a superare i controlli di sicurezza del browser? Ottengo gli stessi risultati in Chrome e Firefox. Se io ospitare la pagina HTML in basso a dropbox.com, Chrome mi dà questo messaggio di errore:
XMLHttpRequest non può caricare http://www.odinfond.no/rest/fund/calc/fundReturn?&id=300&oneTimeInvestment=100000&oneTimeInvestmentDate=2009-11-01&endDate=2010-11-01¤cy=NOK. L'origine http://dl.dropbox.com non è consentita da Access-Control-Allow-Origin.
La risposta JSON che avrei ottenuto se la chiamata è passata può essere vista facendo clic su this direct link. La chiamata all'altro servizio restituisce correttamente. Ospito il seguente codice su 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>
Grazie, ha perfettamente senso! Ho pensato che le richieste fossero quasi identiche, ma non ho mai notato la differenza nell'intestazione della risposta :-) – oligofren