0

我现在有两个网站。一个有令牌,一个应该允许用户使用令牌做事。当我访问具有令牌的第一个站点时, 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);
    }
  });
4

1 回答 1

1

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

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

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

于 2013-07-03T16:37:37.357 回答