无法使用jQuery从外部源加载JSONP数据

时间:2011-12-07 20:22:57

标签: jquery json jsonp

我需要检查justin.tv上的流是否存在。提供一个简单的JSON API,如果我查询

http://api.justin.tv/api/stream/list.json?channel=channel_name

如果流是实时的,它将返回特定的JSON信息。

var url = "http://api.justin.tv/api/stream/list.json";

$.ajax({
  url: url,
  dataType: 'jsonp',
  data: { channel: "scvrush1" },
  success: function(data) { alert(data); }
});

看起来请求成功了,因为当我查看Chrome开发者工具中的Network标签时,我可以看到回复

jsonp request

但是回调没有被执行。

我正在使用带有Rails 3.1.1的jQuery 1.4.2,但我认为这并不重要。

2 个答案:

答案 0 :(得分:2)

您必须指定一个回调函数才能使用JSONP。 justin.tv要求的特定参数是“jsonp”

请参阅:http://apiwiki.justin.tv/mediawiki/index.php/REST_API_Documentation

这有点牵扯,因为他们不使用标准的“callback =?”那个jQuery喜欢。所以你必须手动设置回调变量。

请参阅:http://api.jquery.com/jQuery.getJSON/#comment-75080188

这应该有效:

var url = "http://api.justin.tv/api/stream/list.json";

$.ajax({
  url: url,
  dataType: 'jsonp',
  data: { channel: "scvrush1" },
  success: function(data) { alert(data); },
  jsonp: "jsonp"
});

答案 1 :(得分:0)

justin.tv REST API docs中所述,URL需要将回调指定为?jsonp=?(其中第二个问号代表jQuery自动生成的回调名称)。在jQuery中,设置jsonp参数:

var url = "http://api.justin.tv/api/stream/list.json";

$.ajax({
  url: url,
  dataType: 'jsonp',
  data: { channel: "scvrush1" },
  success: function(data) { alert(data); },
  jsonp: 'jsonp'
});

Here's a demo