我正在开发移动网站,并且我通过jQuery使用JSONP请求联系数据服务器以检索要在移动网站上显示的信息。我被告知不要使用PHP脚本作为代理,因为它会在移动服务器(数百万用户)上造成额外的不必要负载,并严格执行此客户端。我使用以下代码:
var get_vars = '&callback=?&var=here';
$.ajax({
url: "http://server.com/script?" + get_vars,
type: "GET",
dataType: 'jsonp',
//xhrFields: { withCredentials: true },
//crossDomain: true,
success: function(data){
console.log(data)
}
});
服务器使用cookie身份验证来确定用户是否在返回数据之前已登录。奇怪的是,这段代码在Firefox上运行过一次。随后重新加载/刷新页面导致凭证未被服务器验证。起初我认为这是由于我的代码发生了一些变化,但在Google Chrome中进行测试后,它可以100%的时间运行。 Firefox / IE的控制台中也没有显示JS错误。我确定这不是一个缓存问题,并且在另一台使用Firefox的机器上尝试过这个问题,但无济于事。此问题也发生在Windows Phone和Windows 8上的最新版Internet Explorer中。我假设它必须与cookie相关,并且某些方式的凭据不会传递到远程服务器。
至于尝试使用CORS ......我试过了(因为你可以看到注释掉的位,加上我尝试添加$ .support.cors = true),并且无法使用它。我一直在未经授权跨越域名"错误,尽管服务器发出以下标题:
Access-Control-Allow-Credentials:true Access-Control-Allow-Origin:*
任何人都有任何线索可能导致这种情况?我希望能够使用JSONP,因为它已在Chrome中使用。
额外说明:似乎另一位开发者没有和我一样的问题。他报告说,它在100%的时间里都在Firefox上工作。我甚至尝试了以下方法:
唉。我开始认为它可能是在服务器端,虽然我不确定为什么会这样,因为当我使用PHP时,它的工作正常100%。
答案 0 :(得分:0)
看起来我忘了改变我用来通过AJAX登录的方法。登录后我只对数据调用使用JSONP方法。使用CORS时,似乎将cookie数据分开,因此远程服务器没有正确读取cookie数据。
TLDR;不要将CORS和JSONP混合在一起 - 确保使用其中一个以确保您不会遇到此问题!