我可以在同一个域上使用JSONP吗?

时间:2014-10-01 10:18:41

标签: jquery json jsonp

我有一个与服务对话的RESTful Web服务和jquery插件。域名是不同的所以我已经实现了JSONP,一切正常。

我正在进行一些更改并将我的测试客户端和测试服务托管到localhost上,但我的JSONP回调不再被调用。

这是我的jquery电话。

var urlbase = 'http://localhost:8080';

$.getJSON(urlbase + '/Geography/Countries?callback=?', function (results) {
    alert(results);
    // populate the country lookup
    $.each(results, function (key, value) {
        $('select#countrylookup')
          .append($('<option></option>')
          .attr('value', value.Code)    
          .text(value.Name));
    });

我知道正在调用服务并返回结果,因为我的服务断点正在被点击,我可以在fiddler / F12工具中看到请求/响应。

如果(我怀疑)我需要用于“本地域”的JSON和用于跨域的JSONP,其他人在测试时会采用什么策略?显然我不想在任何地方使用任何if(domain == local)样式代码。

2 个答案:

答案 0 :(得分:1)

getJSON方法将确定它是否是来自网址的跨域调用,因此您无法使用它来对同一域进行JSONP调用。使用ajax方法,以便您可以使用crossDomain属性指定它应该使用JSONP:

$.ajax({
  url: urlbase + '/Geography/Countries?callback=?',
  cache: false,
  crossDomain: true,
  success: function (results) {
    alert(results);
    // populate the country lookup
    $.each(results, function (key, value) {
      $('select#countrylookup')
        .append($('<option></option>')
        .attr('value', value.Code)    
        .text(value.Name));
    });
  }
});

答案 1 :(得分:0)

更新:原来我的问题在于VS2010网络服务器。如果我在本地IIS中托管该站点没有任何问题。甚至使用原始的getJSON。

我现在已经运行了几天,似乎一切都很好。我在最初的问题中从未提及过我可能应该使用的VS2010和WebDev.WebServer40.exe。

回答实际问题:是的,您可以在localhost上使用JSONP。