JSON etrafındaki güvenlik parçasını anlamakta biraz sıkıntı çekiyorum çünkü çoğu zaman teoride çalışmam gereken şeyler işe yaramıyor. AFAIK, A alanında bulunan bir sayfadaki bir komut dosyasından gelen çağrıların, bir etki alanından B verileri alması beklenmemektedir. Ancak, aşağıdaki kodda, bir dış etki alanına yapılan çağrılar başarısız olur, diğeri ise geçer. Ve ikisi de paketlenmiş JSON çağrıları (jsonp) değildir.Neden bazı etki alanları arası JSON istekleri başarısız oluyor, ancak diğerleri çalışmıyor?
Bu neden? Her ikisine de tarayıcı güvenlik kontrolünden izin verilmemeli mi? Aynı sonuçları Chrome ve Firefox'ta da alıyorum. Ben dropbox.com aşağıda html-sayfa barındıracaktır ederseniz Chrome bana bu hata mesajını veriyor:
XMLHttpRequest http://www.odinfond.no/rest/fund/calc/fundReturn?&id=300&oneTimeInvestment=100000&oneTimeInvestmentDate=2009-11-01&endDate=2010-11-01¤cy=NOK yükleyemez. Yönlendiren http://dl.dropbox.com , Erişim-Denetim-İzin-Kökeni tarafından izin verilmez.
Aradan geçiş yapılıyorsa JSON yanıtı, this direct link tıklanarak görülebilir. Diğer hizmete yapılan çağrı başarıyla geri döner. Aşağıdaki kodu dropbox'ta barındırıyorum. 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>
Teşekkür ederim, bu mükemmel bir anlam ifade etti! İsteklerin hemen hemen özdeş olduğunu düşündüm, ancak yanıt üstbilgisinde fark hiç fark etmedim :-) – oligofren