私は 3 つの異なる API 呼び出しを行うオーディオ プレーヤーを構築しています。それらはすべて JSONP 形式である必要があるため、JSON データの出力を次のように決定する PHP プロキシ ファイルを作成しました。
$datatype = $_GET["type"];
$artist = urlencode($_GET["artist"]);
$album = urlencode($_GET["album"]);
$content = "";
if($datatype == 'albumart'){
$content = file_get_contents('http://ws.audioscrobbler.com/2.0/?method=album.getinfo&api_key=037358e302c80571663e6a7a66b1dc05&artist=' . $artist . '&album=' . $album . '&format=json');
} elseif($datatype == 'artistart'){
$content = file_get_contents('http://ws.audioscrobbler.com/2.0/?method=artist.getinfo&api_key=037358e302c80571663e6a7a66b1dc05&artist=' . $artist . '&autocorrect=1&format=json');
} else {
$content = file_get_contents('http://cjzn.streamon.fm/metadata/recentevents/CJZN-48k.json');
}
header('Content-type: application/json; charset=utf-8');
echo $_GET['callback'] . '(' . json_encode($content) . ')';
出力をテストすると、正常に動作しているように見えます。それぞれの API データを取得し、JSONP でラップして()
、JSONP コールバックを受け入れます。
それを Javascript ファイルで使用しようとすると、うまくいかないように見えますが、その理由がわかりません! JSON データを呼び出すために使用される関数の 1 つの例を次に示します。
function getAlbumArt(artist,album){
var dataArtist = artist,
dataAlbum = album,
albumArtURL;
$.ajax({
url: 'jsonproxy.php',
dataType: 'jsonp',
data: {
type: 'albumart',
artist: dataArtist,
album: dataAlbum
},
success: function(data) {
if(data.album.image[4]["#text"]){
var albumArtURL = data.album.image[4]["#text"];
$('section.player div.album-artwork').css({'background-image':'url("' + albumArtURL + '")'});
} else {
getArtistArt(dataArtist);
}
},
error: function() {
getArtistArt(dataArtist);
alert('Sorry, unable to retrieve album artwork!');
}
});
}
これがうまくいかない理由を誰か助けてもらえますか?
編集
alert(data);
onをsuccess
実行すると、フィードからすべてのデータがalert(data.album.image[4]["#text"]);
返されundefined
ました。ここで非常に混乱します。誰にも考えはありますか?