Web服务可以不支持JSONP吗?

时间:2013-05-21 08:48:24

标签: javascript jsonp

我正在尝试使用WorldBank API获取数据。我正在进行的网络服务呼叫是this。这段代码不起作用。

$.ajax({
  type: 'GET',
  url: 'http://api.worldbank.org/countries/indicators/3.1_LOW.SEC.NEW.TEACHERS?per_page=50&date=1960:2013&format=json',
  jsonpCallback: 'jsonCallback',
  contentType: "application/json",
  dataType: 'jsonp',
  success: function(data) {
     console.log(data);
  },
  error: function(e) {
     console.log(e.message);
  }
});

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:3)

JSONJSONP完全不同。你问它是为了JSON,但告诉jQuery你要求JSONP。所以这不会起作用。

如果您告诉它,它会support JSONP。您应该使用format=jsonPprefix=the_name_of_your_callback。由于您希望jQuery控制回调名称,因此您需要jsonp参数告诉它API使用非标准prefix参数(而不是callback,这是标准一个)。

$.ajax({
  url: 'http://api.worldbank.org/countries/indicators/3.1_LOW.SEC.NEW.TEACHERS?per_page=50&date=1960:2013&format=jsonP',
  jsonp: 'prefix',
  dataType: 'jsonp',
  success: function(data) {
     console.log(data);
  },
  error: function(e) {
     console.log(e.message);
  }
});

Working Example | Source

以上注释:

  • 已移除type: "GET"。 JSONP 始终 GET
  • 在网址中将format=json更改为format=jsonP
  • 已移除jsonpCallback: 'jsonpCallback'。该参数告诉jQuery为回调函数使用一个特定的名称,这是我们不想要的。
  • 添加了jsonp: 'prefix',告诉jQuery在查询字符串中使用哪个参数作为回调函数的名称。该API文档使用prefix而不是更标准的callback
  • 已移除contentType: "application/json"。您没有发送 JSON,您希望接收 JSON。

答案 1 :(得分:0)

  

网络服务可以不支持JSONP吗?

是。 Web服务可以支持(或不支持)它喜欢的任何数据格式。

您请求的URL是返回JSON,而不是JSONP。