XMLHttpRequest 无法加载:仅使用 Ajax jQuery 中的标头

Posted

技术标签:

【中文标题】XMLHttpRequest 无法加载:仅使用 Ajax jQuery 中的标头【英文标题】:XMLHttpRequest cannot load : only with headers in Ajax jQuery 【发布时间】:2015-10-22 23:44:27 【问题描述】:

我尝试从我自己的 API、jQuery 的 $.ajax 方法获取 JSON 数据。 我的请求中必须包含标头“Authorization-api-key”,否则我将获得 401 状态代码。

$.ajax(
        type: "GET",
        headers: 'Authorization-api-key' : 'key',
        dataType: "json",
        crossDomain: true,
        url: "http://urlofmyonlineapi.com/api/ressource",
        success: function (data) 
            alert(data);
        
);

我在 *** 上阅读了几个关于 CORS 和“XMLHttpRequest 无法加载”问题的线程。因此,在我的 API 中,我添加了这些标头作为响应(我使用 Slim 框架):

$app->response->headers->set('Access-Control-Allow-Origin', '*');
$app->response->headers->set('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
$app->response->headers->set('Access-Control-Allow-Headers', '*');
$app->response->headers->set('Access-Control-Allow-Credentials', 'true');

问题

如果我在 $.ajax 中放入任何带有 'headers: ...' 参数的标题,我的浏览器控制台中有两个错误:

    “选项”错误 “XMLHttpRequest 无法加载”错误

如果我删除标题,我没有错误,但我有 401 状态代码。 如果我使用请求标头中的密钥删除标头和我的 API 身份验证,我会得到我的数据。

【问题讨论】:

【参考方案1】:

我已经解决了这个问题:我的 API 不接受 OPTIONS 请求。 (带有 jQ​​uery 的 Ajax 需要进行 OPTIONS 预请求)

【讨论】:

以上是关于XMLHttpRequest 无法加载:仅使用 Ajax jQuery 中的标头的主要内容,如果未能解决你的问题,请参考以下文章

XMLHttpRequest 跨源请求仅支持协议方案反过来服务器

XMLHttpRequest 跨源请求仅支持协议方案反过来服务器

无法通过 xmlhttprequest 加载本地 xml 文件

如何使用 JavaScript 仅加载 jpg 的一部分 [重复]

XMLHttpRequest 无法使用 jQuery 加载 URL

无法使用 WKWebView 通过 XMLHttpRequest 加载音频文件