JSONP在Chrome中工作但在Firefox / IE中没有?

问题描述 投票:1回答:1

我正在开发一个移动网站,我正在通过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中运行。我甚至尝试了以下方法:

  • 在虚拟机中加载Firefox并遇到相同的问题(以确保不是操作系统问题)
  • 清除了我的手机上的缓存,禁用了wifi,并通过具有相同问题的单独IP连接

啊。我开始认为它可能是在服务器端,虽然我不确定它为什么会这样,因为当我使用PHP时,它工作正常100%。

javascript jquery ajax jsonp cors
1个回答
0
投票

看起来我忘了改变我用来通过AJAX登录的方法。登录后我只对数据调用使用JSONP方法。使用CORS时,似乎将cookie数据分开,因此远程服务器没有正确读取cookie数据。

TLDR;不要将CORS和JSONP混合在一起 - 确保使用其中一个,以确保您自己不会遇到此问题!

© www.soinside.com 2019 - 2024. All rights reserved.