【发布时间】:2015-02-12 07:02:30
【问题描述】:
我正在开发一个移动网站,我通过 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),但无法让它工作。尽管服务器发送了以下标头,但我一直收到“跨域未经授权”错误:
访问控制允许凭据:true 访问控制允许来源:*
有人知道是什么原因造成的吗?我想让它与 JSONP 一起工作,因为它已经在 Chrome 中工作了。
额外说明:似乎另一位开发人员没有遇到与我相同的问题。他报告说它 100% 的时间都在 Firefox 中工作。我什至尝试了以下方法:
- 在虚拟机中加载 Firefox 并遇到同样的问题(以确保不是操作系统问题)
- 清除了我手机上的缓存,禁用了 wifi,并通过单独的 IP 连接,但同样的问题
呃。我开始认为它可能在服务器端,虽然我不确定为什么会这样,因为当我使用 PHP 时它可以 100% 正常工作。
【问题讨论】:
-
我已经看到了。在发帖之前,我做了相当多的研究。显然另一位开发人员没有遇到与我相同的问题,并表示它 100% 的时间都在 Firefox 中为他工作。出于某种原因,我家中的多台设备似乎无法正确进行身份验证 - 我桌面上的 Google Chrome 除外。
标签: javascript jquery ajax jsonp cors