【问题标题】:Using ajax to GET a token from external site returns empty response使用 ajax 从外部站点获取令牌返回空响应
【发布时间】:2013-07-03 16:14:50
【问题描述】:

我现在有两个网站。一个有令牌,一个应该允许用户使用令牌做事。 当我访问具有令牌的第一个站点时,mySite.local/services/session/token 它显示它:OTV4Gu9VQfjIo2ioQ0thajdEJ6nEINoxsLuwgT_6S0w

当我在应该获取此令牌的页面上时,我得到一个空响应并抛出 ajax 函数的错误。

奇怪的是,在使用 firebug 调查问题时,我可以看到 ajax 请求的响应是 43B - 与令牌大小相同。因此,由于某种原因,带有令牌的页面被正确点击,但没有响应。

这是萤火虫响应的屏幕截图:

这里是带有 ajax 请求的 JQuery:

var nid; //global node id variable
  $('html').click(function(){
    try {
      $.ajax({
        url:"http://mySite.local/services/session/token",
        type:"get",
        dataType:"text",
        error:function (jqXHR, textStatus, errorThrown) {
          alert('error thrown - ' + errorThrown);
          console.log(JSON.stringify(jqXHR));
          console.log(JSON.stringify(textStatus));
          console.log(JSON.stringify(errorThrown));
        },
        success: function (token) {
          //Do some stuff now that token is received
        }
      });
    }
    catch (error) {
      alert("page_dashboard - " + error);
    }
  });

【问题讨论】:

  • 我知道它说IP地址是127.0.0.1,但是你是从同一个域名mysite.local访问的吗?
  • 不,托管令牌的是 mysite.local,另一个是 mysitemobile.local
  • 然后你遇到了 AJAX 的跨域限制(又名Same Origin Policy)。如果不使用 CORS 将域列入白名单或JSONP,则无法向另一个域发出 AJAX 请求。
  • 您能否将其发布为答案,以便我将问题标记为已解决?

标签: ajax jquery rest token


【解决方案1】:

您遇到的Same Origin Policy 基本上表明任何由客户端/浏览器语言(如 Javascript)完成的请求都必须位于相同的端口、相同的域名和相同的协议上。在您的情况下,http://mysitemobile.local 不等于 http://mysite.local,因此您的请求被阻止。 Firebug 的显示方式是 43 字节无响应。

有两种方法可以解决此问题,Cross-origin resource sharing (CORS)JSONP。 CORS 是一个 HTTP 标头,它添加到您请求的服务器,并提供允许破坏同源策略的可接受域的白名单。最新的浏览器支持此标头。

另一个选项是 JSONP,将 JSON 对象包装到一个 Javascript 函数中,该函数通常使用 <script> 标签调用。如果另一台服务器返回 {status: 0} 并且您的代码中有一个名为 parseStatus() 的函数,远程服务器将包装到 parseStatus({status:0}); 中,从而调用您的函数而不必担心相同的源策略。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-25
    • 1970-01-01
    • 1970-01-01
    • 2015-03-29
    • 1970-01-01
    • 2015-07-01
    • 2018-06-08
    • 1970-01-01
    相关资源
    最近更新 更多