我现在有两个网站。一个有令牌和一个应该允许用户使用令牌做事的人。 当我访问具有令牌的第一个站点时,它会显示mySite.local / services / session / token:OTV4Gu9VQfjIo2ioQ0thajdEJ6nEINoxsLuwgT_6S0w
当我在应该获取此令牌的页面上时,我得到一个空响应,并抛出ajax函数的错误。
奇怪的是,在用firebug调查问题时,我可以看到ajax请求的响应是43B - 与令牌的大小相同。因此,由于某种原因,带有令牌的页面被正确命中,但响应未通过。
以下是firebug响应的屏幕截图:
这是带有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);
}
});
答案 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});
中,从而调用您的函数而不必担心相同的源策略。