1

Justin TV API に対して単純な AJAX 呼び出しを実行しようとしていますが、一貫して失敗しているようです。

で AJAX 呼び出しを行うとurl1、コンソールは を報告Object { readyState=4, status=200, statusText="success"}しますが、AJAX 呼び出しのエラー関数に陥ります。ブラウザで URL にアクセスすると、返されたデータが[{ ... json ...}].

「url」で AJAX 呼び出しを行うと、呼び出しが成功し、success 関数に入ります。返されたオブジェクトが であることに気付きました{ ...json... }

の AJAX リクエストから有効な JSON オブジェクトを取得するにはどうすればよいですurl1か?

これが私がやっていることの抜粋です:

var url1 = "http://api.justin.tv/api/stream/list.json"
var url = "https://api.twitch.tv/kraken/streams/";

channelNames = "";
for (channelName in streams)
{
    channelNames = channelNames + ',' + channelName;
}
channelNames = channelNames.slice(1);
console.log(channelNames);
console.log(url1);
$.ajax({
    url: url1,
    type: 'GET',
    crossDomain: true,
    dataType: 'jsonp',
    data: { channel : channelNames },
    success: function(data) 
    {
        console.log(data);
        if(data.streams.length > 0)
        {
            $("#streamStatus").html("<ul class='zebra'>");          
            for(i = 0; i < data.streams.length; i++)
            {
                stream = data.streams[i];
                channel = data.streams[i].channel;
                listItem = "<li id='stream"+i+"'>";
                streamName = "<span class='name'>" + streams[stream.name.slice(10)] + "</span>";
                viewers = "<span class='viewers'>viewers:" + stream.viewers + "</span>";
                gameName = "<div class='game'>" + ((channel.game != null) ? channel.game : "No Game Specified") + "</div>";
                listItem += streamName + viewers + gameName + "</li>"; 
                screenCap = "<div class='screenCap' style='display:none;'>" + channel.screen_cap_url_small + "</div>"
                $("#streamStatus ul.zebra").append(listItem);
                $("#streamStatus ul.zebra").append(screenCap);
                //console.log(channel);
            }
            $("#streamStatus").append("</ul>");
        }
    },
    error: function(data) 
    { 
        console.log(data);
    }

編集:これが実用的なソリューションです...

var url1 = "http://api.justin.tv/api/stream/list.json"
var url = "https://api.twitch.tv/kraken/streams/";

channelNames = "";
for (channelName in streams)
{
    channelNames = channelNames + ',' + channelName;
}
channelNames = channelNames.slice(1);
console.log(channelNames);
console.log(url1);
$.ajax({
    url: url1,
    type: 'GET',
    crossDomain: true,
    dataType: 'jsonp',
    jsonp: 'jsonp',
    data: { channel : channelNames },
    success: function(data) 
    {
         ...
    },
    error: function(data) 
    { 
        console.log(data);
    }
4

1 に答える 1

1

あなたは通話中のjsonpとして渡します。それらは交換可能ではありません。dataTypeajax

ご指摘のとおり、返されるデータはJSONP ではなくurl1JSONです。JSONP では、返された JSON データを JavaScript 関数呼び出しでラップする必要があります。

このようにdataTypeと応答本文のデータが一致しないと、常にajax呼び出しが失敗します。

于 2012-07-29T21:36:08.470 に答える