我正在尝试对Justin TV API进行简单的AJAX调用,这似乎是一直失败的。
当使用url1
进行AJAX调用时,控制台报告Object { readyState=4, status=200, statusText="success"}
,但它属于AJAX调用的错误函数。使用浏览器访问URL时,我注意到返回的数据为[{ ... json ...}]
。
当使用'url'进行AJAX调用时,调用通过,进入成功函数。我注意到返回的对象是{ ...json... }
。
如何从url1
的AJAX请求中获取有效的JSON对象?
以下是我正在做的事情:
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);
}
答案 0 :(得分:1)
您在jsonp
来电中将dataType
作为ajax
传递。它们不可互换。
正如您已经注意到的那样,从url1
返回的数据是JSON,不是 JSONP:JSONP需要在javascript函数调用中包装返回的JSON数据。
dataType
与响应正文中的数据之间的这种不匹配将导致ajax
调用失败。