使用ajax从外部站点获取令牌返回空响应

时间:2013-07-03 16:14:50

标签: ajax jquery rest token

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

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

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

以下是firebug响应的屏幕截图: enter image description here

这是带有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);
    }
  });

1 个答案:

答案 0 :(得分:1)

你跑进Same Origin Policy这基本上表明客户端/浏览器语言(如Javascript)所做的任何请求必须在同一个端口上,具有相同的域名和相同的协议。在您的情况下,http://mysitemobile.local不等于http://mysite.local,因此您的请求被屏蔽了。 Firebug的显示方式是43字节无响应。

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

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