【问题标题】:can I use JSONP on same domain我可以在同一个域上使用 JSONP
【发布时间】:2014-10-01 10:18:40
【问题描述】:

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

我正在进行一些更改,并将我的测试客户端和测试服务托管到本地主机上,但我的 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) 样式代码。

【问题讨论】:

    标签: jquery json jsonp


    【解决方案1】:

    getJSON 方法将确定它是否是来自 URL 的跨域调用,因此您不能使用它对同一域进行 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));
        });
      }
    });
    

    【讨论】:

    • 感谢您抽出宝贵时间提供帮助。不幸的是,我仍然无法正常工作,发出本地请求时收到 400 Bad Request。
    • 更新:原来我的问题出在 VS2010 Web 服务器上。如果我在本地 IIS 中托管该站点,则完全没有问题。即使使用原始的 getJSON。我会再做一些检查以确保我是正确的。
    • 赞成这个答案,因为虽然它没有解决我的实际问题,但我不知道 $.ajax 的 'crossDomain' 设置
    【解决方案2】:

    更新:原来我的问题在于 VS2010 Web 服务器。如果我在本地 IIS 中托管站点,则完全没有问题。即使使用原始的 getJSON。

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

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

    【讨论】:

      猜你喜欢
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      • 2011-12-18
      相关资源
      最近更新 更多