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

时间:2014-12-13 19:30:16

标签: javascript jquery ajax jsonp cors

我正在开发移动网站,并且我通过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%。

1 个答案:

答案 0 :(得分:0)

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

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