2013-07-03 20 views
0

我现在有两个站点。一个有一个令牌,另一个应该允许用户使用令牌来执行任务。 当我访问有令牌的第一个站点,mySite.local /服务/会话/令牌就说明它:OTV4Gu9VQfjIo2ioQ0thajdEJ6nEINoxsLuwgT_6S0w使用ajax从外部站点获取令牌返回空响应

当我是应该得到这个令牌在页面上,我得到一个空的响应和ajax函数的错误被抛出。

奇怪的是,当用firebug调查问题时,我可以看到ajax请求的响应是43B - 与令牌的大小相同。因此,出于某种原因带有令牌的页面正常打开,但响应没有通过。

这里是萤火虫响应的截图: enter image description here

这里是JQuery的使用Ajax请求:

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

我知道它说的IP地址是127.0.0.1,但你是从相同的域名'mysite.local'访问它吗? –

+0

不,一个托管令牌的将是mysite.local,另一个会是mysitemobile.local – CR47

+1

然后你用AJAX(又名[同源策略](http://en.wikipedia.org/wiki)运行到跨域限制/ Same_origin_policy))。如果不使用CORS来列出域名或[JSONP](http://stackoverflow.com/questions/3506208/jquery-ajax-cross-domain),则无法向另一个域发出AJAX请求。 –

回答

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});中,从而调用您的函数而不必担心相同的源策略。