JSONP 在 Chrome 中工作但在 Firefox/IE 中不工作?

Posted

技术标签:

【中文标题】JSONP 在 Chrome 中工作但在 Firefox/IE 中不工作?【英文标题】:JSONP working in Chrome but not in Firefox/IE? 【发布时间】: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% 正常工作。

【问题讨论】:

看看这个:***.com/questions/1640391/… 我已经看到了。在发帖之前,我做了相当多的研究。显然另一位开发人员没有遇到与我相同的问题,并表示它 100% 的时间都在 Firefox 中为他工作。出于某种原因,我家中的多台设备似乎无法正确进行身份验证 - 我桌面上的 Google Chrome 除外。 【参考方案1】:

我好像忘记更改通过 AJAX 登录时使用的方法。我只是在登录后对数据调用使用 JSONP 方法。使用 CORS 时,似乎将 cookie 数据分开,因此远程服务器没有正确读取 cookie 数据。

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

【讨论】:

以上是关于JSONP 在 Chrome 中工作但在 Firefox/IE 中不工作?的主要内容,如果未能解决你的问题,请参考以下文章

UILabel tap 在模拟器中工作但在 iphone 中不工作

Jquery 对象 innerHTML 在 Firefox 中工作但在 IE 中不工作?

NuxtJS:在开发中工作但在生产中工作的路由(netlify)

后台获取在模拟器中工作但在真实设备中不工作

向量查找函数在 Visual Studio 中工作但在 GCC 中不工作

高度的自动布局在 iOS 8 中工作但在 iOS 7 中不工作