jQuery GET 请求同一域名下的 API 时出现 CORS 错误

4
我正在尝试从同一域中的API加载一些数据。您可以在http://bwq.aintno.info/adc_temp找到示例。请求在页面加载时开始,因此如果您查看控制台,可以看到请求失败。但是,如果我在浏览器中访问链接(http://bwq.aintno.info/ads/api/index.php/specimens)或使用Postman进行GET请求,则会正常返回JSON。这是我的.htaccess文件的内容:
Header set Access-Control-Allow-Origin "*"

有人知道如何修复这个问题吗?提前感谢任何帮助。


它在Chrome中加载得很好。整个数组在控制台中显示,没有错误。 - WesleyE
它在IE10中也可以正常加载,控制台显示数组没有错误。 - Jonathan Naguin
@WesleyE 你说得对,在Chrome/Canary的无痕模式下似乎可以工作,而且在Firefox中也可以。唯一不能工作的时候是在我的常规Chrome或Canary上。也许这与我的Chrome安装/设置有关?(我认为设置会在Chrome/Canary之间同步?) - thomastuts
@haiQt 尝试清除缓存数据,可能你正在使用一些旧的 JavaScript... - Jonathan Naguin
@t.niese 哇,太棒了,就是这个。禁用 Adblock 立即解决了问题。你有什么想法是什么导致了这个问题吗?这似乎不是 Adblock 的预期行为... - thomastuts
显示剩余2条评论
1个回答

0

从您的评论中我知道您使用了 广告拦截器

广告拦截器 的问题在于它们通过匹配规则来阻止广告,可以是 URL 或特定 DOM 结构(如 class 名称或 id)。

通常情况下,如果您在浏览器中遇到问题,请禁用所有扩展程序进行测试。这可以通过使用隐私模式来完成(在大多数情况下),因为许多 不良 扩展程序在那里被禁用。或者使用未安装扩展程序的配置文件。

如果一切正常,则很可能是干扰性扩展程序造成的问题。

在您的情况下,问题出在 URL 上:

 http://bwq.aintno.info/ads/api/index.php/specimens
                  ^________^

对于这个部分,在例如EasyList.info/ads/)中有一个匹配规则 - 很可能其他列表中也有类似的规则。

因此,一般来说,像ads(或类似的单词)并带有前缀或后缀,很可能会被屏蔽。

不仅广告拦截器会导致页面出现问题,还有其他扩展程序也可能导致页面崩溃,因此您需要检查它是否与常用的修改DOM的扩展相冲突(我知道这不是好消息)。

但是您绝对应该根据过滤列表检查您的URL,并考虑检查您的DOM是否与之匹配。或者至少要避免包含听起来像广告的URL或classid

目前我不知道的一件事,但现在有点担心的是 easy list 中的规则是 .info/ads/。在我看来,像 script?param=.info/ads/ 这样的请求也可能被阻止。虽然这应该被转义,但我认为我需要在我的工作流程中添加一些额外的测试。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接