我正在处理一个JavaScript脚本,该脚本向另一个服务器(我自己的域)发出AJAX请求。 JavaScript脚本使用插件添加到页面中。它应该从我的域上的PHP文件中检索数据。
我已将以下标头添加到PHP文件中:
<?php
header("Access-Control-Allow-Origin: *");
但是AJAX请求仍然会抛出错误。将*更改为我计划在其上使用的实际域名也不起作用。我已经搜索了堆栈溢出的答案,并发现了以下内容:
// Allow from any origin
if (isset($_SERVER['HTTP_ORIGIN'])) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
也不起作用。
我认为我的.htaccess文件可能会以某种方式影响事物,所以我暂时删除了它,但是AJAX请求仍然说在PHP文件中没有设置Access-Control-Allow-Origin标头。
我在daniweb.com上发现了这个: https://www.daniweb.com/web-development/php/threads/461902/php-header-is-not-working-for-access-control-allow-origin 这是没有解决的。
如果标题已经设置(以多种方式),那么为什么AJAX请求仍会抛出错误,说明标题尚未设置?
答案 0 :(得分:1)
通过AJAX请求发送的数据破坏了PHP脚本 - 导致它无法正确执行,我猜这会阻止正确设置标头。
请注意以后对此的所有观点:我认为这是您可能无法正常工作的原因 - 而且很可能为什么我在撰写本文之前所看到的主题从未得到回答。这无疑是令人尴尬的。我想在此之前没有人会认为他们做了些蠢事。
确保您在请求中发送的数据不会以某种方式导致PHP脚本无法执行。