JSONクロスドメインポリシーの問題で問題が発生しています。少し実験した後、このコードを機能させることができましたが、まったく同じであるはずの2つのコードがあり、1つしか機能しないという状況に遭遇しました。
私がアクセスしているJSONはここにあります
http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json
このファイルは単純なJSONPのように見えます。パラメーターを使用せず、JSONにjsonCallBackという関数呼び出しが埋め込まれています。有効なJSONのようです。
これが、このJSONデータを取得するために使用しようとした最初のコードセットです。
$.getJSON("http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json?callback=jsonCallback", function (data) {
//This will not alert
alert(data.APHNonStopProducts.Carpark[0].Airport.airportcode);
});
callback=?
私の理解では、匿名関数にデータを渡すために、を関数ラッパーの名前に置き換えることができます。このコードは、Chrome開発ツールで次のエラーを示しています。
XMLHttpRequestは http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json?callback=jsonCallbackをロードできません。Origin http://fiddle.jshell.netは、Access-Control-Allow-Originでは許可されていません。
URLをそのままaphnonstopproductsjson.json?callback=?
にして、名前付き関数がコードに存在する場合、データは適切に取得され、名前付き関数が呼び出されます(ただし、匿名関数はまだ呼び出されません)。
これが機能する2番目のコードです。
$.ajax({
url: "http://www.aph.com/files/partners/aphnonstopproducts/json/aphnonstopproductsjson.json?callback=?",
dataType: 'json',
jsonp : "callback",
jsonpCallback: "jsonCallback",
success: function(data) {
//This alert will fire
alert(data.APHNonStopProducts.Carpark[0].Airport.airportcode);
}
});
});
この呼び出しでは、パラメーター名をコールバック、関数名をjsonCallbackにすることを指定しています。つまり、本質的に、それは最初のコードと同じではありませんか?もしそうなら、なぜ最初のコードは失敗するのですか?
ここで両方のコードを参照してください:http://jsfiddle.net/3EXca/(「ABZ」というアラートを受け取るはずです)